document.write('
');
// TwitterAPIから受け取ったJSON…というかオブジェクト
var jsonArray = {"errors":[{"code":32,"message":"Could not authenticate you."}]};
for (var i = 0; i < jsonArray.length; i++) {
var obj = jsonArray[i];
if (obj.user.protected == true) {
document.write('- ');
document.write('現在、鍵が掛かってます…');
document.write('
');
document.write(' ');
document.write('- ');
document.write('
');
document.write(' ');
break;
}
/*
* ツイート本文の加工
*/
// ツイート本文
var tweet = obj.text;
// 改行
tweet = tweet.replace(/\n/g, '
');
// Twitter公式のサムネイル挿入
if (obj.entities.media) {
if (obj.entities.media[0].type == "photo") {
tweet = tweet.replace(obj.entities.media[0].url,
'
');
}
}
// 一般URL短縮「t.co」を展開&リンク
var urlCnt = obj.entities.urls.length;
if (urlCnt > 0) {
for (var j = 0; j < urlCnt; j++) {
tweet = tweet.replace(obj.entities.urls[j].url,
''
+ obj.entities.urls[j].expanded_url
+ '');
}
}
// instagramのサムネイル挿入&リンク処理
tweet = tweet.replace(/\"_blank\">https:\/\/instagram[.]com\/p\/([\w\-]+)\/<\/a>/g,
'"_blank">
');
// Twitpicのサムネイル挿入&リンク処理
tweet = tweet.replace(/\"_blank\">http:\/\/twitpic[.]com\/(\w+)<\/a>/g,
'"_blank">
');
// フォト蔵のサムネイル挿入&リンク処理(
tweet = tweet.replace(/\"_blank\">http:\/\/photozou[.]jp\/photo\/show\/([0-9]+)\/([0-9]+)<\/a>/g,
'"_blank">
');
// yFlogのサムネイル挿入&リンク処理
tweet = tweet.replace(/\"_blank\">http:\/\/yfrog[.]com\/(\w+)<\/a>/g,
'"_blank">
');
// twitvideoのサムネイル挿入&リンク処理
tweet = tweet.replace(/\"_blank\">http:\/\/twitvideo[.]jp\/(\w+)<\/a>/g,
'"_blank">
');
// 携帯百景のリンク処理
tweet = tweet.replace(/\"_blank\">http:\/\/movapic[.]com\/pic\/(\w+)<\/a>/g,
'"_blank">
');
// リツイートを自分のツイートと明確に区別
if (obj.retweeted_status) {
var retweet_ref_name = obj.retweeted_status.user.name;
retweet_ref_url =
tweet = tweet.replace(/^RT @([\w]+):/g,
'【'
+ retweet_ref_name
+ 'さんのTweet紹介】
');
}
// 宛先のリンク
var mentionCnt = obj.entities.user_mentions.length;
if (mentionCnt > 0) {
for (var j = 0; j < mentionCnt; j++) {
tweet = tweet.replace('@' + obj.entities.user_mentions[j].screen_name,
'@'
+ obj.entities.user_mentions[j].screen_name
+ '');
}
}
// ハッシュタグをリンク
var hashtagCnt = obj.entities.hashtags.length;
if (hashtagCnt > 0) {
for (var j = 0; j < hashtagCnt; j++) {
tweet = tweet.replace('#' + obj.entities.hashtags[j].text,
'#'
+ obj.entities.hashtags[j].text
+ '');
}
}
// 本文が 0x5C で終わると「\'」→ unterminated string literal(閉じてないことになるので)
// 0x5C で終わるのはキャラクタ2バイト目が 0x5C 、すなわち 0x5C の重複ケース
tweet = tweet.replace("/\\\\$/", "\\ ");
// JavaScriptで¥が消える件
tweet = tweet.replace('\\', '\\\\');
// シングルクォートはJavaScriptの括りを破壊してしまうので
tweet = tweet.replace("/'/", "\'");
/*
* ツイート本文の出力
*/
document.write('- ');
document.write(tweet);
document.write('
');
/*
* 付帯情報の組み立て
*/
// ツイート本体のURL
tweetUrl = 'https://twitter.com/'
+ 'nigaradi'
+ '/statuses/'
+ obj.id_str;
// 返信ツイートアイコン
var replyTo = "";
if (obj.in_reply_to_status_id_str) {
replyTo = ''
+ '
' + ' ';
}
// 位置情報アイコン
var point = "";
if (obj.geo) {
if (obj.geo.coordinates.length) {
var lat = obj.geo.coordinates[0];
var lng = obj.geo.coordinates[1];
point = ''
+ '
';
}
}
// ツイート日時
var dateValues = obj.created_at.split(" ");
dateValue = dateValues[1] + " " + dateValues[2] + ", " + dateValues[5] + " " + dateValues[3];
var date = new Date(dateValue);
date.setHours(date.getHours() + 9);
var year = date.getYear();
if (year < 2000) { year += 1900; }
var mon = '0' + (date.getMonth() + 1);
mon = mon.substr(mon.length - 2);
var day = '0' + date.getDate();
day = day.substr(day.length - 2);
var dy = date.getDay();
dy = new Array("(日)","(月)","(火)","(水)","(木)","(金)","(土)")[dy];
var hour = '0' + date.getHours();
hour = hour.substr(hour.length - 2);
var minute = '0' + date.getMinutes();
minute = minute.substr(minute.length - 2);
var dateText = year + "/" + mon + "/" + day + dy + " " + hour + ":" + minute;
// リツイートされた件数
var rt_stat = "";
if (obj.retweet_count) {
rt_stat = '
×'
+ obj.retweet_count;
}
// お気に入りにされた件数
var fav_stat = "";
if (obj.favorite_count) {
fav_stat = '
×'
+ obj.favorite_count;
}
// リツイート数とお気に入り数の間のスペーサー
var spacer = "";
if (obj.retweet_count && obj.favorite_count) {
spacer = " ";
}
// 端末判別
var ua = obj.source;
if (ua.match(/movatwi|yubitter|Keitai/i)) {
ua = '
';
}
else if (ua.match(/iphone/i)) {
ua = '
';
}
else if (ua.match(/Echofon/i)) {
ua = '
';
}
else if (ua.match(/android/i)) {
ua = '
';
}
else {
ua = '
';
}
// 付帯情報のフォーマッティング
var incidental = '- '
+ replyTo
+ point
+ ''
+ dateText
+ ''
+ ua
+ '
'
+ rt_stat
+ spacer
+ fav_stat
+ ' ';
/*
* 付帯情報の出力
*/
document.write(incidental);
}
document.write('
');