普段はプログラミングとは全然関係のない仕事をしています。
調べながらGASを書いてみたのですが、うまくいきません。
下記、ヒントをいただけますと幸いです。
###前提・実現したいこと
RSSの内容を、ChatWorkに流したいと思っています。
- RSSは複数URLあり、下記のようにA列にURL、B列にサイト名の形でGoogleスプレッドシートに入っている。
A | B |
---|---|
RSSのURL1 | サイト名1 |
RSSのURL2 | サイト名2 |
… | … |
-
GASを使ってChatWorkに流したい
-
最終的なアウトプットは、下記を目指している
<サイト名1>
ページタイトル1-1
URL1-1
ページタイトル1-2
URL1-2
…
<サイト名2>
ページタイトル2-1
URL2-1
ページタイトル2-2
URL2-2
…
- チャットワークと連携するためには、下記のGASライブラリを使用
https://github.com/cw-shibuya/chatwork-client-gas
###発生している問題・エラーメッセージ
現在、出力はできているのですが、最終的に目指している形になっていません。
下記のように、1つ目のRSSのサイト名のみ出てきます。
<サイト名1>
ページタイトル1-1
URL1-1
ページタイトル1-2
URL1-2
ページタイトル2-1
URL2-1
ページタイトル2-2
URL2-2
…
また、RSSを直に見たときと、チャットワークにはき出されるURLの数も違います。
###該当のソースコード
IDやトークンなどは念のためxxxxxで伏字にしております。
function sendNewsToChatwork() { //現在のスプレッドシートを取得 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); //現在のシートを取得 var sheet = spreadsheet.getActiveSheet(); //最後の行を取得 var rowSheet=sheet.getDataRange().getLastRow(); //チャットワークトークン var client = ChatWorkClient.factory({token:'xxxxxxxxxxxxxxxx'}); //投稿するチャットルームのID var room_id = xxxxxxxx; //フィードからデータを取得 for( var i=1;i<=rowSheet;i++ ) { //RSSのURL一覧が入っているセルを取得 var range = sheet.getRange(i,1).getValue(); //GoogleアラートのRSSフィード var feedURL = range; //サイト名取得 var sitetitle = sheet.getRange(i,2).getValue(); //サイト名を流す // client.sendMessage({room_id: room_id, body: "<" + sitetitle + ">"}); var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom'); var document = XmlService.parse(UrlFetchApp.fetch(feedURL).getContentText()); var items = document.getRootElement().getChildren('entry', atom); //取得した件数分チャットワークへ投稿 for(var j = 0; j < items.length; j++) { //サイトのURLを取得 var link = items[j].getChild('link', atom).getAttribute('href').getValue(); //サイトのタイトルを取得 var title = items[j].getChild('title', atom).getText(); //URLとタイトルを連結 if (j == 0){ var message = "<" + sitetitle + ">" + "\n" + title + "\n" + link; }else{ var message = title + "\n" + link; } } //HTMLタグを除去してチャットワークへ投稿 client.sendMessage({room_id: room_id, body: message.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,'')}); } /*//テスト投稿 client.sendMessage({room_id: room_id, body: range});*/ }
###試したこと
現在【URLとタイトルを連結】の箇所に入っているサイト名をはき出す部分を【サイト名取得】の下にコメントアウトしてある部分を使って別にしてみたところ、下記のようにそれぞれのRSSの一つ目のURLのみ出るようになりました。
<サイト名1>
ページタイトル1-1
URL1-1
<サイト名2>
ページタイトル2-1
URL2-1
…

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/02 02:08
2017/11/02 02:13