質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Q&A

解決済

1回答

572閲覧

統計調査の為Twitterで自動RTbot作成したいです

alice

総合スコア34

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

0グッド

0クリップ

投稿2015/04/08 14:44

いつも有難うございます。

統計調査等の仕事の流れで
twitterにて
特定のキーワードA,Bに反応する
自動RTbotを作成することになりました。
いろいろ探し回ったところ
海外のサイト【http://www.techcovered.org/how-to-create-your-own-twitter-auto-retweet-bot/】にてGoogleAppsScriptを使用したものを見つけました。
(下記がコードになります)

ですがプログラミング初心者故にAとBに当たるキーワードをどこにいれればいいのか判別がつきません。

ご教示いただけませんでしょうか。

お手数ですがよろしくお願い致します。

function Twitter_RSS() {
return;
}

function doGet(e) {

var widgetID = e.queryString? e.queryString : "ERROR_NO_ID_FOUND";
var cache = CacheService.getPublicCache();
var id = "Twitter" + widgetID;
var rss = cache.get(id);

if ( ! rss ) {
rss = getTweets(widgetID);
cache.put(id, rss, 120); // Expire in 2 minutes
}

return ContentService.createTextOutput(rss)
.setMimeType(ContentService.MimeType.XML);
}

function getTweets(id) {

try {

var widget, json, tweets, regex, tweet, list, time, url, when, rss, heading, title, link, alltweets, permalink, permatitle; title = "Twitter RSS Feed : " + id; link = "http://www.techcovered.org/#" + id; url = "http://cdn.syndication.twimg.com/widgets/timelines/" + id; widget = UrlFetchApp.fetch(url); json = Utilities.jsonParse(widget); if ( ! json.body ) { return; } list = json.body.replace(/(\r\n|\n|\r)/gm," ") .replace(/\s+/g, " ") .replace(/<div class=\"(h-card|footer|detail-expander|retweet-credit)[^>]*>(.*?)<\/div>/gi, "") .replace(/<time[^>]*>(.*?)<\/time>/gi, ""); regex = new RegExp(/<h1[^>]*>(.*?)<\/h1>/ig); if ((heading = regex.exec(list)) !== null) { regex = RegExp(/href="(.*?)"/ig); if ((permalink = regex.exec(heading[1])) !== null) { link = permalink[1]; } regex = RegExp(/title="(.*?)"/ig); if ((permatitle = regex.exec(heading[1])) !== null) { title = permatitle[1]; } } var self = ScriptApp.getService().getUrl() + "?" + id; rss = '<?xml version="1.0"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">'; rss += ' <channel><title>' + title + '</title>'; rss += ' <link>' + link + '</link>'; rss += ' <atom:link href="' + self + '" rel="self" type="application/rss+xml" />'; rss += ' <description>' + title + ' :: RSS Generator available at http://www.labnol.org/?p=28149</description>'; regex = RegExp(/<ol[^>]*>(.*?)<\/ol>/ig); if ((alltweets = regex.exec(list)) !== null) { alltweets = alltweets[1].replace(/\s+/g, " "); var re = /<a class=".*?permalink.*?" href="(.*?)" data-datetime="(.*?)"[^>]*>(.*?)<\/a>(.*?)<p[^>]*>(.*?)<\/p>/gm; while (tweet = re.exec(alltweets)) { url = tweet[1]; when = Utilities.formatDate(parseDate(tweet[2]), "UTC", "EEE, d MMM yyyy HH:mm:ss"); tweet = tweet[5].replace(/<\s*(div|span|b|p)[^>]*>/gi, "") .replace(/<\s*\/\s*(div|span|b|p)[^>]*>/gi, "") .replace(/class=".*?"|rel=".*?"|title=".*?"|target=".*?"|data-expanded-url=".*?"|data-query-source=".*?"|dir=".*?"|data-scribe=".*?"/gi, "") .replace(/\s+/g, " "); if(tweet.substring(0,2)!="RT") { rss += "<item>"; rss += " <title>"+ tweet.replace(/<a[^>]*>(.*?)<\/a>/gi, "") + "</title>"; rss += " <pubDate>" + when + " +0000</pubDate>"; rss += " <guid>" + url + "</guid>"; rss += " <link>" + url + "</link>"; rss += " <description><![CDATA[ @"+url.split("/")[3] + ": " + tweet + "]]></description>"; rss += "</item>"; } } rss += "</channel></rss>"; return rss; }

} catch (e) {
Logger.log(e.toString());
}
}

function parseDate(d) {

var date = /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/;
var m = date.exec(d);
var year = +m[1];
var month = +m[2];
var day = +m[3];
var hour = +m[4];
var minute = +m[5];
var second = +m[6];

return new Date(year, month - 1, day, hour, minute, second);
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これ、Twitter への OAuth 認証せずに Timeline を取得する 隠れ API みたいですね。
Twitter Widget https://twitter.com/settings/widgets というのを使ってます。
検索設定は https://twitter.com/settings/widgets/new で行います。それで作った id の API で JSON を吐いてくるようです。このスクリプトだと widgetID にその id を登録するみたいですね。

ですが…これは id 取得(つまり検索設定)が比較的簡単でも、そのあとが非常に面倒ですよ。

ガジェットIDからタイムラインを取得できる。ただ整形処理が必要でめんどくせー
http://cdn.syndication.twimg.com/widgets/timelines/324713397071527936

twitter_undocumented/README.md at master · owencoder/twitter_undocumented

というような先人の意見もあります。

Twitter API を使ったアプリケーション作成を行った方が良いと思います。PHP が使えるならばそのあたりで探してください。(わたしは Ruby しか使えないのでなにも紹介できませんが。 Ruby ネタにご希望があるならば紹介します。


ところで。

統計調査等の仕事

で RT bot って意味がわからんのですが。
目的に合致するツイートを収集する、というのならば分かりますけどね。

投稿2015/04/08 16:53

編集2015/04/08 16:55
riocampos

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alice

2015/04/09 00:45

riovamposさん、早速のご回答ありがとうございました。 そうなのですね。参照先、拝見しました。参考にさせていただきます。 現状PHPは勉強し始めている、といったところで、難しいコードは書けません。 差し支えなければ、Rubyの場合のケースをご教示いただけませんでしょうか。 お忙しいようでしたら大丈夫です。 お手数おかけしております。 統計調査等の仕事 現状、実験的に行いたいということなので、先方の詳細な意図までは把握できていない状態です。 おそらく、riocamposさんが推測されている内容と同じように思っています。
alice

2015/04/09 02:21

>ですが…これは id 取得(つまり検索設定)が比較的簡単でも、そのあとが非常に面倒ですよ。 頂いたURLを拝見いたしましたが、私のPCでは見ることができませんでした... お手数おかけして申し訳ありませんが、 上記の一文の意味をお教えいただけますでしょうか。 以上になりますが、よろしくお願いいたします。
riocampos

2015/04/09 03:26

一文の意味だけ。 引用した 「ただ整形処理が必要でめんどくせー」 そのものです。実際に返値まで見たわけじゃなく、その意見とコードから推測しただけです。 コードの上だと↓に相当するかと。 list = json.body.replace(/(\r\n|\n|\r)/gm," ") .replace(/\s+/g, " ") .replace(/<div class=\"(h-card|footer|detail-expander|retweet-credit)[^>]*>(.*?)<\/div>/gi, "") .replace(/<time[^>]*>(.*?)<\/time>/gi, "");
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問