Twitterで発言中のt.co短縮URLを展開する。

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);
	});
});