実現したいこと
チャットワークに送られたメッセージをスプレッドシートに自動で記録する。
発生している問題・分からないこと
エラーは発生せず実行完了となるのに、スプレッドシートにメッセージが記録されない。エラーメッセージも出ないので何が問題なのかわからない。
エラーメッセージ
error
1エラーは起きていないと表示されます
該当のソースコード
function chatwork_archive() { var api_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //ここにapiトークンを入力してください。 var room_id="xxxxxxxxxx"; //ここにメッセージ一覧を取得したいroom_idをいれてください var spreadsheetId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //スプレッドシートidを入力してください var params = { headers : {"X-ChatWorkToken" : api_token}, method : "get" }; var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/messages?force=0"; //force=0は前回取得後に追加されたメッセージのみを取得 var response = UrlFetchApp.fetch(url, params); if(response.getContentText()){ const res_data= JSON.parse(response.getContentText()); var mySheet=SpreadsheetApp.openById(spreadsheetId).getSheetByName("log") var lastRow= mySheet.getLastRow()+1; for(let i=0;i<res_data.length;i++){ mySheet.getRange(lastRow,1).setValue(res_data[i]["message_id"]); mySheet.getRange(lastRow,2).setValue(res_data[i]["account"]["name"]); mySheet.getRange(lastRow,3).setValue(res_data[i]["body"]); mySheet.getRange(lastRow,4).setValue(Utilities.formatDate(new Date(res_data[i]["send_time"]*1000),"Asia/Tokyo", "yyyy/MM/dd: HH:mm:ss")); mySheet.getRange(lastRow,5).setValue(Utilities.formatDate(new Date(res_data[i]["update_time"]*1000), "Asia/Tokyo", "yyyy/MM/dd: HH:mm:ss")); lastRow++; }; }; };
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
・スプレッドシートのシート名を【log】でないものにしてエラーが出るか試しましたがエラーが出ずに実行完了となったので、そもそもスプレッドシートを取得出来ていないように思います。
・スプレッドシート自体を変更しましたが解決しませんでした。
補足
https://dokugaku-hiro-partsbox.com/chatwork-1-2/#toc4
上記のサイトのコードをそっくりそのままコピペして使用しています。
同じコードを使用して、2度は正常に動いたのですが、3つ目を作った際にこの現象が発生しました。
ログなど出力するとかしてif文の中とかループがどのように実行されているのかを確認されてはどうですか?
ログの出力方法があっているかわからないのですが、デバックからif文のところ(14行目)ブレークポイントを設定して見てみましたが、うまくいっている物と比較してもおかしな所は見つけられませんでした。質問文に自分が見た画面を添付してみました。
14行目がif文のところなのであれば、その次の行が実行されるかステップ実行するなり、そこにブレークポイントを設定するなりしてはどうですか?
実行して何も結果が得られないのであれば、if文の中が実行されていないとかfor文の中が実行されていないということだと思います。
ログの出力に関しても「GAS ログ出力」とでも検索すれば色々と情報が出てくるかと思います。
if文の中が実行されていないのであればresponse.getContentText()がどういう値となっているかを出力したり、for文の中が実行されないのであればループ条件となるres_dataがどうなっているかなど確認してみてください。
あなたの回答
tips
プレビュー