
引き続き、HSP(HotSoupProcessor)を使って、チャットワークAPIの利用スクリプトをお送りします。
前回のコードはこんな感じ
htmlをダウンロードするスクリプトでした。ちなみに、ダウンロード保存する部分をそのまま使うことで、API利用時に帰ってくるレスポンス(エラーメッセージだったり、取得できたデータだったり)を保存する用に使う予定になってます。
#include "hspinet.as"
// ネット接続確認
netinit
if stat : dialog "ネット接続できません。" : end
//baseURI設定
URI = "https://www.google.co.jp/"
//urlの設定
URL = "index.html"
neturl URI
netrequest URL
*main
//取得待ち確認
netexec res
if res > 0 : goto *comp
if res < 0 : goto *bad
await 50
goto *main
*bad
//エラー
neterror estr
mes "ERROR "+estr
stop
*comp
mes "DOWNLOAD 完了"
stop
これを改造しつつチャットワークAPIを使ってデータの取得とメッセージの送信をやりたいと思います。
HSPとは
Hot Soup Processor(ホットスーププロセッサー)は、1995年からおにたまにより開発されているプログラミングツール、およびそのプログラミング言語である。略称はHSP。最新安定バージョンは3.4。
HSPはベーシックライクなプログラムでホント手軽にWindowsなどのアプリケーションが作成できるので、ちょっとした作業用のプログラムを作るのによく利用しています。
チャットワークとは
チャットワークは、業務の効率化と会社の成長を目的とした、メール・電話・会議に代わるコミュニケーションツールです。
チャットワークは業務での連絡、チーム内での伝達やファイル共有などで使っています。クラウドタイプなので、相手のオンオフに依存しないで利用できるのも便利なポイントですね。無料プランもあるので、気軽に試せるのもポイント。一度登録してみてはいかがでしょうか?
準備しよう
前回の記事にHSPのダウンロードやAPIについてなど書いてあります。もし、準備がまだの方がいらっしゃいましたら、そちらをご覧くださいませませ。
チャットワークの自分情報をHSPで取得してみよう
APIドキュメントにて確認

チャットワーク上での自分のプロフィールを取得してみます。APIドキュメントをみてみるとトークンをリクエストヘッダにて送信する必要がありそうです(以下、部分部分で引用させていただきます)。
リクエスト
チャットワークAPIのエンドポイントへは、必ず https で接続する必要があります。(http では接続エラーになります)
また、すべてのリクエストには必ずAPIトークンを含める必要があり、APIトークンはHTTPリクエストヘッダに X-ChatWorkToken というキーでセットする必要があります。
HSPでのリクエストヘッダ命令「netheader」を使います。
netheader "X-ChatWorkToken:ここに取得したトークンを記述"
また、接続先(エンドポイント)は「https://https://api.chatwork.com/v1」で、その後ろにパスを付けることで情報の種類などを切り替えるみたいですね。ここでは自分情報なので、引用の例文通り、/meをつかいます。
エンドポイントのベースURIは、https://api.chatwork.com/v1 となっています。このあとに、各エンドポイントのパスを記述してください。(例:/me の場合は https://api.chatwork.com/v1/me)
さらに、HSPのnetdlnameで取得したデータを保存するファイル名を設定します。ここではoutput.txtにしました。以上を踏まえて前回のコードを改造。
スクリプトを改造して実行
以下のようなコードになりました。
#include "hspinet.as"
// ネット接続確認
netinit
if stat : dialog "ネット接続できません。" : end
//baseURI設定
URI = "https://api.chatwork.com/v1"
myprofile = "/me"
//ヘッダー設定
netheader "X-ChatWorkToken:ここに取得したトークンを記述"
//urlの設定
neturl URI
netdlname "output.txt"
netrequest myprofile
*main
//取得待ち確認
netexec res
if res > 0 : goto *comp
if res < 0 : goto *bad
await 50
goto *main
*bad
//エラー
neterror estr
mes "ERROR "+estr
stop
*comp
mes "DOWNLOAD 完了"
stop
*「ここに取得したトークンを記述部分」は自分で取得したものに入れ替えて実行してください(コロンは消さないように注意)
これを実行してみるとスクリプトがある同じフォルダにoutput.txtが出来ていると思います。これを開くと。。。
{"account_id":xxxxxxx,"room_id":xxxxxxxx,"name":"xxxxxxxxxxxxxxxxx","chatwork_id":"","organization_id":xxxxxx,"organization_name":"","department":"","title":"","url":"","introduction":"","mail":"","tel_organization":"","tel_extension":"","tel_mobile":"","skype":"","facebook":"","twitter":"","avatar_image_url":"https://tky-chat-work-appdata.s3.amazonaws.com/avatar/1005/1005358.rsz.jpg"}
実際にはidなどはxではなく数字などが入っています
上のような感じでデータが取得されていることが確認できるかと思います。無事APIを使っての結果が出せたみたいですね! これをAPIドキュメント、エンドポイントの/meで確認してみると

という感じで、改行こそ違いますが、過不足なく取得できていることが確認できました。ちなみに、メソッドはGETだったのですが、デフォルトでGETになっているようだったので、特に設定はしていない状態です。以下もGETメソッドの時には特に設定はしていません。
チャットワークのマイチャットにHSPでメッセージを送信してみよう
まずは、チャットの一覧を取得してマイチャットの情報を確認
次はいよいよメインイベント。チャット一覧との取得マイチャットにメッセージを送信してみます。APIドキュメントによるとメソッドはGETでパスは/roomsでした。先ほどの自分情報とほぼ同じスクリプトでいけそうですね。

ということで、改造する部分は
【追加】 myrooms = "/rooms" 【修正】 netrequest = myrooms
になります。また、取得した結果を保存するファイル名は同じなので、先ほどの自分情報のデータのファイルが上書きされてしまう状態になってます。回避したい場合はテキストのファイル名を変えることをお勧めします。さらに注意としては、結果取得したファイル(output.txt)を別のアプリケーションで開いている場合…例えば、さっき確認するのにテキストエディタやメモ帳などで開いたままにしてある状態でHSPにて上書きをしようとするとエラーが発生してしまいます。かならず閉じておいてから実行してくださいね。
実行してみると(見やすいように改行をしています)
[{
"room_id":xxxxxxxx,
"name":"\u30de\u30a4\u30c1\u30e3\u30c3\u30c8",
"type":"my",
"role":"member",
"sticky":true,
"unread_num":0,
"mention_num":0,
"mytask_num":0,
"message_num":41,
"file_num":1,
"task_num":0,
"icon_path":"https://tky-chat-work-appdata.s3.amazonaws.com/avatar/ico_default_green.png",
"last_update_time":1470800851
},
{
"room_id":xxxxxxxx,
"name":
(以下省略)
とズラリとデータが並びました。チャット一覧なので、チャットルームの数分だけ{}のデータの塊が並んでいることになります。中身にはルームID(room_id)、チャットルーム名(name)などがデータとして入っています。nameの部分はデコードするとマイチャットに変換できます(変換確認できるサービスKWONLINE.ORG | Unicode Escape Sequence)。今回はこのマイチャットにメッセージを送信したいので、そのルームIDを控えておきましょう。
マイチャットにメッセージを送ってみよう
マイチャットのルームIDもわかったので、最後にマイチャットへメッセージを送信してみたいと思います。APIドキュメントの/rooms/{room_id}/messagesのチャットに新しいメッセージを追加を参照します。

メソッドはpostなので「?method=POST」をリクエスト文に追加し、さらに項目にbody[string]が必須として載っています。使い方は例文のところをみると
curl -X POST -H "X-ChatWorkToken: 自分のAPIトークン" -d "body=Hello+ChatWork%21"
となっているのでbody部分のみ取り出して考えると、リクエスト部分には先ほどのメソッドの後ろに「body=Hello+ChatWork%21」と追加してあげれば行けそうです。あと、送るメッセージ部分にはurlエンコードが必要そうなので、HSPでその処理もしてあげた方がよさそうですね。それらを考慮してスクリプトを以下の項目の追加・修正をしてみました。コード全文は最後に載っております
【追加】 roomid = "/ここにルームIDの数字を入力" addmessages = "/messages" use_method = "?method=POST" body = "&body=" text = "チャットワークにHSPでメッセージを送信してみよう~その2~" //念のため文字コードをutf-8にして、urlencodeにてurlエンコード処理する nkfcnv text_beta, text, "Sw" urlencode encode_text,text_beta 【修正】 neturl URI+myrooms+roomid netrequest addmessages+use_method+body+encode_text
実行前のマイチャット(ぼかしばかりですみません・汗)はこちら。

実行後はこんな結果になりました!

無事にメッセージの送信(書き込み)ができました。想像していたよりも手軽にAPIが使えたんじゃないでしょうか(ちなみにoutput.txtにはメッセージのIDが返ってきています)。
まとめ
最終的なコードはこんな感じになりました。
#include "hspinet.as"
// ネット接続確認
netinit
if stat : dialog "ネット接続できません。" : end
//baseURI設定
URI = "https://api.chatwork.com/v1"
myprofile = "/me"
myrooms = "/rooms"
roomid = "/46082793"
addmessages = "/messages"
use_method = "?method=POST"
body = "&body="
text = "チャットワークにHSPでメッセージを送信してみよう~その2~"
//念のため文字コードをutf-8にして、urlencodeにてurlエンコード処理する
nkfcnv text_beta, text, "Sw"
urlencode encode_text,text_beta
//ヘッダー設定
netheader "X-ChatWorkToken:68d31c9042a94494f1460cdf8620a90d"
//urlの設定
neturl URI+myrooms+roomid
netdlname "output.txt"
netrequest addmessages+use_method+body+encode_text
*main
//取得待ち確認
netexec res
if res > 0 : goto *comp
if res < 0 : goto *bad
await 50
goto *main
*bad
//エラー
neterror estr
mes "ERROR "+estr
stop
*comp
mes "DOWNLOAD 完了"
stop
実は、POSTメソッド部分などでHSP用の命令を使ってみたりしたんですが、どうにもうまくできずに苦労していたりします。解決策としてリクエスト文に?method=POSTを追加することで回避できたのが大きかったですね。あと、APIドキュメントには他にも色々載っていますので、試してみてください。またメッセージ部分もチャットワークでの表現用の書き方なんかも載っていますので、それを駆使することでもっと便利に使えるようになることうけあい。以下で確認確認。