Twitter APIのhome_timelineやmentions_timelineのオプションで”include_entities”を真にすると、tcoで短縮される前のURLを取得することができます。最初から展開してくれればいいんですけどねこれ…。
続きにPerlとPHPとJavaScriptでサンプルコードを用意しました。APIはv1.1を使用しています。
Perl
Net::Twitter::Lite::WithAPIv1_1使用。
#use等は割愛
my $access_token = "";
my $access_token_secret = "";
my $consumer_key = "";
my $consumer_secret = "";
my $twit = Net::Twitter::Lite->new(
consumer_key => $consumer_key,
consumer_secret => $consumer_secret,
);
$twit->access_token($access_token);
$twit->access_token_secret($access_token_secret);
my $tw = $twit->user_timeline({count => 10, include_entities => 'true'});
foreach my $tweets (@$tw) {
my $tweet_text = $tweets->{text};
foreach my $url (@{$tweets->{entities}{urls}}) {
my $tco_url = $url->{url}; #t.co
my $long_url = $url->{expanded_url}; #展開後
$tweet_text =~ s/$tco_url/$long_url/; #t.coを置換
}
print $tweet_text . "\n";
}
PHP
twitteroauth使用。
<?php
// twitteroauth.phpを読み込む。パスは適宜変更
require_once('twitteroauth.phpのパス');
$consumer_key = "";
$consumer_secret = "";
$access_token = "";
$access_token_secret = "";
// OAuthオブジェクト生成
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
$req = $to->OAuthRequest("http://api.twitter.com/1.1/statuses/home_timeline.json","GET",array("count"=>"30", "include_entities" => "true"));
$json = json_decode($req);
foreach($json as $status){
$text = $status->text; // 発言内容
$item = $status->entities->urls;
if (isset($item)){
foreach ($item as $url) {
$tco_url = (string)$url->url;
$long_url = (string)$url->expanded_url;
$text = str_replace($tco_url,$long_url,$text); //置換
}
}
echo $text."\n";
}
?>
JavaScript
jQuery使用。ただJSON処理するだけ。OAuth認証用のライブラリは用途によって変わってくるので割愛。
var twitterAPI = "http://api.twitter.com/1.1/statuses/home_timeline.json";
$.getJSON(twitterAPI, { include_entities:"true" }, function(data) {
$(data).each(function() {
var textstr = this.text;
$((this.entities).urls).each(function() {
textstr = textstr.replace(this.url, this.expanded_url);
});
console.log(textstr);
});
});