Chatworkでのやり取りを使って
モチベーション(やる気)を出すために
案件の簡単な進捗管理を作ってみたく思った
ChatWorkのデータを取得してみよう
チャットワークでAPIで投稿内容を取得する
ttps://developer.chatwork.com/docs/getting-started
Chatwork画面右上の「利用者名」をクリックして表示されるメニューの「サービス連携」を選択してください。
サービス連携画面が開きますので、左側のメニューから「APIトークン」を選択してください。とのこと
まずは、APIトークンの取得する
APIの動作確認には、まずは、Curlがお勧めなので
ttps://qiita.com/n0bisuke/items/25813fba8120451d40da
を、参考に
curl -X GET -H “X-ChatWorkToken: 自分のAPIトークン” “https://api.chatwork.com/v1/rooms/{room_id}/messages?force=0”
ルームIDがあれば、チャンネルのルームの情報が取得できそう
{room_id}
は、
チャンネルを開いた時の
https://www.chatwork.com/#!rid36010xxxx
idのあとの数字(現在は9桁)
まずは、curlで、投げてみる
curl -X GET -H “X-ChatWorkToken: 自分のAPIトークン” “https://api.chatwork.com/v1/rooms/{room_id}/messages?force=0”
{“errors”:[“Chatwork API v1 is now obsolete. Please use the latest version.”]}
で、怒られた
ttps://developer.chatwork.com/reference/get-rooms-room_id-messages
本家で調べたら
ttps://api.chatwork.com/v2/rooms/{room_id}/messages
との事
v2でないと、行けないよう
curl -X GET -H “X-ChatWorkToken: 自分のAPIトークン” “https://api.chatwork.com/v2/rooms/{room_id}/messages?force=0”
よっしゃ!!つながった。
Jsonは、ブラウザで解析ができるので
curl -X GET -H “X-ChatWorkToken: 自分のAPIトークン” “https://api.chatwork.com/v2/rooms/{room_id}/messages?force=0″ > chatwork.json
と、jsonの拡張子で吐き出して
ChromeでなくFireFoxで表示しましょう。
見れた。
投稿の100件が取り込めている
これで行けそう
タイムスタンプが send_timeが10桁の数字
これを変換ししないと
これが、投稿時刻の年月日時分のはず
Googleで
chatwork api timestamp
で、検索
ttps://freeelover.com/2022/09/gas/gas%E6%B4%BB%E7%94%A8%E6%B3%95/1130/
ttps://www.shanaidx.com/chatwork_task/
// limit = new Date(json[i].limit_time * 1000 ); // UNIXTIMEを変換してdateにセット
こんなのがあったので、UNIXTIMEというものか?
Googleで
UNIXTIME から 日付に PHP
で、検索
ttps://onga-tec.hatenadiary.jp/entry/2016/08/19/PHP_unixtime%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E6%97%A5%E4%BB%98%E3%81%AE%E5%A4%89%E6%8F%9B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88
にあったので、
これで、行きそう。
1 2 3 4 5 6 |
現在のunixtimeを求める。 echo time(); unixtimeを指定の日付形式にフォーマット。 echo date('Y/m/d H:i:s', time()); |
PHPで、直接確認するために
Googleで
コマンドラインで PHP を実行
で、検索
ttps://www.php.net/manual/ja/features.commandline.usage.php
php -r ‘print_r(get_defined_constants());’
こんなことできるんだ
php -r ‘echo time();’
1725521712
php -r ‘echo date(‘Y/m/d H:i:s’, time());’
エラーになった
’が重なったら、ダメですね
php -r “echo date(‘Y/m/d H:i:s’, time());”
表示してくれた
APIで取り込んだデータも
10桁なので、そのままいけそう
取り込んだ、データで、変換してみる
php -r “echo date(‘Y/m/d H:i:s’, 1725106055);”
上手く行った
準備ができたので、まずは
PHPを使って、結果を、GoogleSpreadSheetに貼り付けるものを、作って行こう
それから、データベース(Mysql)へ、吐き出すプログラムをPHPで作って、進捗管理に使って行こうと思う
とりあえず、吐き出したJsonを使って、CSVを書き出してみた。
これで、ExcelやGoogleSpreadSheetには、読み込める
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $jsonUrl = "chatwork.json"; //JSONファイルの場所とファイル名を記述 if (file_exists($jsonUrl)) { $json = file_get_contents($jsonUrl); $obj = json_decode($json, true); $data=""; for ($i = 0; $i < count($obj); $i++) { $data=$data.'"_'.$obj[$i]["message_id"].'","'.date('Y/m/d H:i', $obj[$i]["send_time"]).'","'.$obj[$i]["account"]["name"].'","'.$obj[$i]["body"].'"'."\n"; } print($data); $fname="outdata.csv"; $output_fh = fopen($fname, "w"); fwrite($output_fh, $data); fclose($output_fh); } |
2回目の呼び出しは
forceintegerDefaults to 0
forceはドキュメントより
強制的に最大件数まで取得するかどうか。0
を指定した場合(既定)は前回取得分からの差分のみを返しますが、1
を指定した場合は強制的に最新のメッセージを最大100件まで取得します。
の引数は0だと、前回の続きなので、繰り返すと返信がなくなる
返信がない場合、1にするといい
余談ですが
Unixtime
1970年からの経過秒数
なんだ。。
php -r “echo date(‘Y/m/d H:i:s’, 9999999999);”
2286/11/21 02:46:39
260年後には、大騒ぎになるのかな?
残念ながら、そこまでは、生きて、立ち会うことは、少し難しそうですが。