GAS(Google Apps Script)で、ChatWorkのログをスプレッドシートに吐き出すという、PGを作った。
ほぼPGは完成し、実際の環境(膨大なメッセージログがある)でのテストで発覚。
chatwork API のファイル一覧取得は
古い日付から100件のみしか取得できない
というその事実。
そんな馬鹿な!
まさか、古いの100件しかとれないわけない!
最新100件しかとれないなら分かるけど!
ChatWorkファイル一覧取得の正解はなんだろう?
いろいろググったが、明確な答えにたどりつけず…
ChatWorkからの返答
もう運営に聞くしかないと思い、ChatWorkに問い合わせたら、
現段階では古参ファイル100件しかリスト取得できません
101件目からは取得できません(2023/2現在)
な、なんだってーーー!!
うそだ!うそだ!チャットグループ内に100以上添付ファイルあったら、最新ファイル情報とれないじゃないかーーーー!!
※めちゃくちゃ添付ファイルありのチャットグループだった
てか、ファイルリスト取得する前提でPG作ってたから、PG作り直しやん…そしたら、どうやってファイル情報取得するので??
結論
昔プログラマだったが、現職種はPGは本職ではなく、API使うのもGAS(javascript)も初心者なので、それが正解かは分からないが、もはや、メッセージの内容から、ファイルIDを取得して、ダウンロードするしかないんじゃ…という結論になった。
他の道があるのかは分からないが、OLDプログラマの自分にはそのような泥臭い方法しか思いつかなかった。
例えば、メッセージ内容からファイルをダウンロードする時に必要なファイルIDは切り出しして取得できるので、メッセージ内に入っている、「[download:XXXXXXXXXX]」タグのファイルID10桁の数字を抜き出して、ダウンロードするみたいなPGを作成。
メッセージ内容↓
'ファイルを送信いたします。[download:XXXXXXXXXX]添付ファイル100.xls (99.00 KB)'
match関数などで、ファイルIDの数字部分XXXXXXXXXXだけ切り出す
fileid=XXXXXXXXXX
とりあえず、こんな感じで、作った。
1:新規メッセージ取得して、スプレッドシートに吐き出し
https://api.chatwork.com/v2/rooms//messages?force=1
2:新規追加分のメッセージ内容を1件ずつまわして確認
3:添付ファイル[download:XXXXXXXXXX]があったら、ファイルIDの数字とファイル名を切り出して取得し、ChatWorkAPIにリクエストしてCWでのファイルのURLを取得し、googleドライブへファイル保存を実行
※保存時に添付ファイルの名前とGoogleドライブの保存先URLを抑えておく
4:最後に、スプレッドシートの添付ファイルがあったメッセージのセルにファイル名でハイパーリンクを作ってGoogleドライブの保存先URL貼り付け
的なロジックになった。
結果スプレットシートはこんな感じ。
ログ一覧
送信日付|送信者|メッセージ内容 |添付ファイル
23/03/01|山田 |ファイル送ります。月間.pdf |月間.pdf(※ハイパーリンク)
23/03/02|佐藤 |ファイルはなしです。 |
ファイルリストが取得できてれば、ファイルIDとファイル名を取得できるので楽だったが、仕方がない。
しかし、
・GASは6分で処理が終わらないとタイムアウトエラーになる
・チャットワークのAPIにリクエストしてもらえるチャットワークのファイルダウンロード用のURLは30秒しか有効じゃない
とかいろいろな制約があり、先人が公開してくださっているソースではメッセージログ数が多すぎて、本番環境ではタイムアウトエラーでうまく動かなかった…
途中でタイムアウトエラーになると、データ内容を配列?に保存してるため、一切メールとかスプレッドシートにアウトプットされないままに終了となったりとか…
というかそもそもファイル一覧取得を使うと、古参100件のファイルリストしか取得できないというのもあり…
3回もPGを作り直してようやく、上記ロジックにて完成した。
チャットワークの過去ログ閲覧に制限がついたので、今後活躍しそうなプログラムではある。