スポンサーリンク
新ブログ「amazon探検隊!」ではTwitterでつぶやいた商品名を列挙するようにしました。
こんな感じです。もちろん全部アフィリエイトです。
Amazon でチェック!
たとえばこれなんか画像もカスタマーレビューも表示されて、もし見てもらえれば
ブログで下手な宣伝するよりも圧倒的に効果的だと思う訳です。
以前はPHPを使った処理例を書きましたが、JavaScriptだけでも出来ます。
やり方はTwitter APIを使って、データを取得。
返ってきたJSONの配列をJavaScriptのコールバック関数で処理するだけです。
ソースコード全文
<h3 style="font-size:90%">Amazon でチェック!</h3>
<ul id="twitter_print"></ul>
<script type="text/javascript">
var tweet_print=function(json){
var tweet_print_ul=document.getElementById('twitter_print');
var href='https://twitter.com/jungle_shop/statuses/';
for(var i=0;i<json.length;i++){
var text=decodeURIComponent(json[i].text)
.replace(/^.+?(\sの\s)|^.*Just saw this on Amazon:\s*|\s*を Amazon でチェック!.+$|https?:\/\/.+$/g,'');
var li=document.createElement('li');
li.innerHTML='<a href="'+href+json[i].id_str
+'" target="_blank">'+text+'</a>';
tweet_print_ul.appendChild(li);
}
}
var src='http://api.twitter.com/1/statuses/user_timeline.json'
+'?screen_name=jungle_shop&count=10&callback=tweet_print';
var script=document.createElement('script');
script.setAttribute('type','text/javascript');
script.setAttribute('src',src);
var head=document.getElementsByTagName('head');
head[0].appendChild(script);
</script>
ソースコードの説明
下は表示領域です。
<h3 style="font-size:90%">Amazon でチェック!</h3>
<ul id="twitter_print"><!-- ここに挿入される --></ul>
この後の <script type=”text/javascript”> から </script> までがJavaScriptの記述部分です。
まず、JSONを受け取るコールバック関数を定義します。名前はtweet_printにしました。
var tweet_print=function(json){
/* 表示領域のエレメントを取得 */
var tweet_print_ul=document.getElementById('twitter_print');
/* 下のURLにid_strを足したのが個別ツイートのURL */
var href='https://twitter.com/jungle_shop/statuses/';
/* JSONの配列を繰り返し処理 */
for(var i=0;i<json.length;i++){
/* URLエンコードして送られてきたツイートをデコード */
/* さらに正規表現で商品名だけを抜き出す */
var text=decodeURIComponent(json[i].text)
.replace(/^.+?(\sの\s)|^.*Just saw this on Amazon:\s*|\s*を Amazon でチェック!.+$|https?:\/\/.+$/g,'');
/* liのエレメントを生成 */
var li=document.createElement('li');
/* liのinnerHTMLにリンクを挿入 */
/* リンク先は href+json[i].id_str */
li.innerHTML='<a href="'+href+json[i].id_str
+'" target="_blank">'+text+'</a>';
/* エレメントliをulに追加 */
tweet_print_ul.appendChild(li);
}
}
次はユーザーのタイムラインを取得するREST式URLの生成部分です。
ここで示した条件にマッチした結果がJSONの配列となってコールバック関数に渡されます
ベースURL
http://api.twitter.com/1/statuses/user_timeline.json
json を xml, rss, atomのどれかに変えれば、それぞれのフォーマットで取得できます。
今回指定するプロパティ
-
screen_name : ユーザー名(@ユーザー名の@を除いたもの) -
count : 取得したいつぶやきの数(最大200、未設定なら20となる) -
callback : コールバック関数名を指定
var src='http://api.twitter.com/1/statuses/user_timeline.json' +'?screen_name=jungle_shop&count=10&callback=tweet_print';
そして、scriptタグのエレメントを生成します。srcが、上のブロックで作ったURLです。
var script=document.createElement('script');
script.setAttribute('type','text/javascript');
script.setAttribute('src',src);
最後はヘッダにscriptタグを追加します。
注意しないといけないのはブラウザが表示領域(今回の場合だとtwitter_print)を
認識した後で追加しないと表示できないということです。
HTMLでヘッダに直接書き込まず、ここで追加しているのはそういう理由です。
var head=document.getElementsByTagName('head');
head[0].appendChild(script);
ちなみに今回返ってきたのは、下のフォーマットです。
[
{
"created_at":"Wed May 30 19:20:14 +0000 2012",
"id":207914334309982208,
"id_str":"207914334309982208",
"text":"\u30a2\u30be\u30f3\u30a4\u30f3\u30bf\u30fc\u30ca\u30b7\u30e7\u30ca\u30eb \u306e \u30d4\u30e5\u30a2\u30cb\u30fc\u30e2\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u30ba\u30b7\u30ea\u30fc\u30ba \u50d5\u306f\u53cb\u9054\u304c\u5c11\u306a\u3044 \u67cf\u5d0e\u661f\u5948 \u3092 Amazon \u3067\u30c1\u30a7\u30c3\u30af\uff01 http:\/\/t.co\/bD4FqR6u #OTAKU",
"source":"\u003ca href=\"http:\/\/twitter.com\/tweetbutton\" rel=\"nofollow\"\u003eTweet Button\u003c\/a\u003e",
"truncated":false,
"in_reply_to_status_id":null,
"in_reply_to_status_id_str":null,
"in_reply_to_user_id":null,
"in_reply_to_user_id_str":null,
"in_reply_to_screen_name":null,
"user":{
"id":593010829,
"id_str":"593010829",
"name":"\u30a2\u30de\u7bb1",
"screen_name":"jungle_shop",
"location":"",
"description":"",
"url":"http:\/\/jungle.ldblog.jp\/",
"protected":false,
"followers_count":1,
"friends_count":5,
"listed_count":0,
"created_at":"Mon May 28 19:45:58 +0000 2012",
"favourites_count":0,
"utc_offset":32400,
"time_zone":"Irkutsk",
"geo_enabled":false,
"verified":false,
"statuses_count":13,
"lang":"ja",
"contributors_enabled":false,
"is_translator":false,
"profile_background_color":"C0DEED",
"profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png",
"profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png",
"profile_background_tile":false,
"profile_image_url":"http:\/\/a0.twimg.com\/sticky\/default_profile_images\/default_profile_5_normal.png",
"profile_image_url_https":"https:\/\/si0.twimg.com\/sticky\/default_profile_images\/default_profile_5_normal.png",
"profile_link_color":"0084B4",
"profile_sidebar_border_color":"C0DEED",
"profile_sidebar_fill_color":"DDEEF6",
"profile_text_color":"333333",
"profile_use_background_image":true,
"show_all_inline_media":false,
"default_profile":true,
"default_profile_image":true,
"following":null,
"follow_request_sent":null,
"notifications":null
},
"geo":null,
"coordinates":null,
"place":null,
"contributors":null,
"retweet_count":0,
"favorited":false,
"retweeted":false,
"possibly_sensitive":false
}
]
関連コンテンツ
スポンサーリンク