質問: 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 ... ---
回答: 普段はプログラミングとは関係無いお仕事に従事されつつも、業務改善の為に自らプログラミングをされる姿勢、感じ入った次第です。少しでも助けになればと思い、コードと動作を確認させていただきました。 何点か問題が見受けられました。ただ、質問者様が利用されているRSS/AtomフィードのURLが分からなかった為、こちらで適当なフィードを試した結果ですのでその点はご承知置きください。 まず始めに、 ``` //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,'')}); ``` で、message 変数の宣言に問題があり、未初期化のmessage変数を `client.sendMessage({room_id: room_id, body: 省略` で使用するかたちになり停まってしまっていたケースがありました。また、ループ内でmesseageに適切に連結できていないように見受けられましたので、これも修正の必要があるように思いました。 次に、「1つ目のRSSサイトしか出ていかない」原因ですが、以下のコード `document = XmlService.parse(UrlFetchApp.fetch(feedURL).getContentText());` で受信するフィードの内容がXMLとして不完全で、JavaScriptの例外(Exception/要はエラー)が発生してしまい、その内容が処理されずにスキップ〜ChatWorkに送信する前に強制終了してしまうケースがありました。フィードの内容(XML)が不完全なのはコンテンツ提供側の問題なので、こちらではどうしようも無いと思います。これも > > RSSを直に見たときと、チャットワークにはき出されるURLの数も違います。 > > > の原因のひとつかと考えられます。上記を踏まえて修正、確認してみたコードが以下になります。 ``` function sendNewsToChatwork3() { //現在のスプレッドシートを取得 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); //現在のシートを取得 var sheet = spreadsheet.getActiveSheet(); //最後の行を取得 var rowSheet = sheet.getDataRange().getLastRow(); //チャットワークトークン var client = ChatWorkClient.factory({ token: '----------------' }); //投稿するチャットルームのID var room_id = '--------'; //フィードからデータを取得 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 + ">"}); try { var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom'); var content = UrlFetchApp.fetch(feedURL).getContentText(); // XmlService.parseで不正なXMLの為に例外が起きるケース有り。 var document = XmlService.parse(content); var items = document.getRootElement().getChildren('entry', atom); // サイト名をあらかじめセットしておく var message = "<" + sitetitle + ">"; //取得した件数分チャットワークへ投稿 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を連結 message += "\n" + title + "\n" + link; } //HTMLタグを除去してチャットワークへ投稿 message = message.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, ''); client.sendMessage({ room_id: room_id, body: message }); } catch (e) { // XMLのパースが失敗した場合、例外 Logger.log("excepton: " + e); } } } ``` 完全に質問者様の要望通りの送信内容になっているかは分かりませんが、よろしければお試しください。完成までもう少しだと思いますので、もう一息がんばってください。