Slide 1

Slide 1 text

GetRest関数を作るぞ! 荒川 雄介

Slide 2

Slide 2 text

自己紹介 一応、商社に勤める情報システム部の社員。 社内SE。

Slide 3

Slide 3 text

基幹DB REST API化計画 商品マスターをRESTで呼び出せるようにすれば便利だろうな。 RESTのJSONをCalcの関数で取ってこれるようにすると超便利! SOAPサーバー化 Webservice関数で扱える。 難しいので諦める。 世間はJSON

Slide 4

Slide 4 text

RESTサーバー化 テーブル名やカラム名が日本語 ORMに乗らない データも日本語 サーバーの方は進展ありません。(´;ω;`) そんなことよりもLibreOffice側に大問題が…。

Slide 5

Slide 5 text

getRest Plugin LibreOffice CalcでRESTとJSONが扱える素敵なPlugin。 LibreOffice GetRest Plugin LibreOffice GetRest Plugin ‑ GitHub 素晴らしい!! しかし、

Slide 6

Slide 6 text

getRest Pluginの問題 日本語が盛大に文字化け ...orz

Slide 7

Slide 7 text

Unicodeエスケープ ISO 8859‑1の文字コードで無理やり2byte文字を表現する方式 例えば、 大牟田市 \u5927\725f\u7530\u5e02 上記のように変換されて表示されてしまう。 REST APIのデータの文字コードの規定は無い。(要出典) 既定は無いのでISO 8859‑1で返してしまう。 新しい規格にはUTF‑8で返せという規定があるらしい。(要出典) Unicodeエスケープされてしまう。 これじゃ、扱えない。(´;ω;`)

Slide 8

Slide 8 text

新しいgetRest関数が求められる 世の中何でも REST API JSON livedoor天気 zipcloud ‑ 郵便番号検索 LibreOfficeにはGetRest関数が必要! 何よりも俺が一番欲しい! 作るか…。

Slide 9

Slide 9 text

何で作る? Java Python Java Java VM入れるの面倒 人気ないね。(´;ω;`) Python LibreOfficeに標準装備 REST Client 標準装備 JSON Library 標準装備

Slide 10

Slide 10 text

LibreOffice同封のPythonはPython3 Pythonは3以外認めない! 究極のBattery Include。 Pythonで決定!!

Slide 11

Slide 11 text

どう作る? LibreOffice API LibreOfficeが真面に用意しているものはこれぐらいです。 後はOpenOfficeのリファレンスを見ろ。 Bugzilla ‑ Write a PyUNO tutorial/walktrough 絶望しかない。(´;ω;`) 誰か!簡単なCalcの関数を作ったやつはいねーか!

Slide 12

Slide 12 text

まともなSample p‑‑qさんのサイト LibreOffice5(10)Calcに関数を追加するPython拡張機能の例その1 python‑bridge ‑ example python‑tokencounter‑calc‑addin.oxt スペース毎に文字列をカウントしてくれる簡単な関数が実装されてい る。 これを改造する。

Slide 13

Slide 13 text

改造開始 1. installして動くことを確認 2. python‑tokencounter‑calc‑addin.oxt をzipにリネーム 3. 中身を解凍 4. .pycを全部消してもう一度zipに圧縮 5. zipをoxtにリネーム 6. 動くことを確認 ここから改造だな

Slide 14

Slide 14 text

IDLファイル IDL UNO APIとPythonとの橋渡し XGetRest.idl #include module org { module openoffice { module addin { module sample { interface XGetRest : com::sun::star::uno::XInterface { /** swaps the content of the incoming array */ string GetRest( [in] string str ); }; }; }; }; };

Slide 15

Slide 15 text

IDLからコンパイル IDLを書いただけでは動かない。 コンパイルする必要がある。 idl > urd > rdb urdファイル作成 $IDLC="C:\Program Files\LibreOffice\sdk\bin\idlc" $IDIST="C:\Program Files\LibreOffice\sdk\idl" $IDLC -I $IDIST XGetRest.idl RDBファイル作成 これでgetrest.pyの内容がLibreOffice UNOと紐づけられた。 $REMERGE="C:\Program Files\LibreOffice\program\remerge.exe" $REMERGE ../rdb/sample1.rdb UCR XGetRest.urd

Slide 16

Slide 16 text

各場所の書換 reg.uno.py description.xml tokencounter.pyをgetrest.pyに改造

Slide 17

Slide 17 text

oxtファイルにする 1. 各ファイルを選択 2. 右クリック > zip圧縮 3. .zip > .oxt

Slide 18

Slide 18 text

試してみる お、動いたか!

Slide 19

Slide 19 text

orz...

Slide 20

Slide 20 text

戦いは終わらない...。 途中までのソースはGithubに晒した。 誰か助けて欲しい。(´;ω;`) GetRest ‑ Github