Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

WebService 開発実績

ドコモ携帯電話でTumblrのDashboardが見れる「mblr(モブラー)」をPHPで書いた

投稿日:


mblr
ボクは通勤時間が1時間ちょいはかかるので、もっぱらモバツイとかでTwitterを見てヒマをつぶすんですが、前からTumblrも見たいなーと思っていたんです。で、ガラパゴスケータイであるドコモユーザーとしてはkuさんが作られたreblog.ido.nuというサービスが前から存在しているんですが、最近アクセスしたら何かPhotoポストしか表示されないっぽい。(ダメな携帯と言っているので流石に愛想を尽かしたのだろうw)
というわけで、昨日の夜2時間くらいコード書いたら、まあ見れるようになったのでそのままソースを公開してしまいます。ってか、Dashbord API叩いているだけなのでコア部分は30分くらいでできたけど、携帯での見た目を調整するだけで3倍の時間かかったorz。

ソースコード

<?php
/**
* mblr (モブラー)
* 携帯でTumblrするためのPHPスクリプトです。
*
* ==API==
* http://www.tumblr.com/api/dashboard?email={email}&password={password}$start={start}&num={num}
*
* @author yager <yager at creazy.net>
*/
?>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style type="text/css"><!--body,p,blockquote{font-size:small;}--></style><title>mblr</title></head><body><h1>mblr</h1>
<?php
// api
$api_base = 'http://www.tumblr.com/api/dashboard';
// params
$email    = isset($_POST['email'])    ? $_POST['email'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';
$start    = isset($_POST['start'])    ? $_POST['start'] : '0';
if ( preg_match('/^[0-9]+~[0-9]+$/',$start) ) {
$start_end = explode('~',$start);
$start     = $start_end[0]-1;
} else {
$start = 0; $end = 10;
}
// ID/PWなし->ログイン
if ( empty($email) || empty($password) ) {
?>
<form action="" method="POST">
email:<input type="text" name="email" /><br />
password:<input type="text" name="password" /><br />
<input type="submit" value="ログイン" />
</form>
<?php
}
// ID/PWあり->ダッシュボード
else {
echo '<span style="font-size:small;">'.($start?$start/10+1:1).'page</span><hr />';
// Kick API
$api = $api_base.'?email='.urlencode($email).'&password='.urlencode($password).'&num=10&start='.$start;
$response = file_get_contents($api);
$xml      = simplexml_load_string($response);
// Format
$i = 0;
foreach ( $xml->posts->post as $post ) {
$out = '';
switch ($post->attributes()->type) {
case 'link':
$out
= '<div style="font-size:small;"><a href="'.$post->children()->{1}.'">'.$post->children()->{0}.'</a></div>'
. $post->children()->{2};
break;
case 'photo':
$out
= '<a href="'.$post->children()->{3}.'"><img src="'.$post->children()->{6}.'" border="0" /></a><br />'
. $post->children()->{0};
break;
case 'video':
$out
= '<div style="font-size:small;">[Video]'.$post->children()->{0}.'</div>';
break;
case 'audio':
$out
= '<div style="font-size:small;">[Audio]'.$post->children()->{0}.'</div>';
break;
default: // regular, quote, conversation
$out
= '<div style="font-size:small;">'.$post->children()->{0}.'</div>'
. $post->children()->{1};
}
$out .= '(via <a href="'.$post->attributes()->url.'">'.$post->attributes()->tumblelog.'</a>)';
$out = str_replace('<p>','<div style="font-size:small;">',$out);
$out = str_replace('</p>','</div>',$out);
$out = str_replace('<blockquote>','<blockquote style="font-size:small;">',$out);
echo $out."<hr />\n";
if ( $i == 9 ) {
break;
} else {
$i++;
}
}
?>
<form action="" method="POST" style="text-align:center;"><input type="hidden" name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" /><input type="hidden" name="password" value="<?php echo htmlspecialchars($password,ENT_QUOTES); ?>" />
<?php
if ( $start > 0 )   echo '<input type="submit" name="start" value="'.($start-9).'~'.$start.'" />';
echo '<input type="submit" name="start" value="top" />';
if ( $start < 250 ) echo '<input type="submit" name="start" value="'.($start+11).'~'.($start+20).'" />';
}
?>
</form></body></html>

↑のソースを適当な名前.phpで保存してPHPが動くサーバーにアップロードしてください。
SimpleXMLとか使っているのでPHP5以上でないと動かないです。
非常にシンプルなので100行足らずで済みました。ライブラリ依存もないです。

スクリーンショット

ログイン画面
設置したファイルにアクセスすると、ログインフォームが表示されます。
Tumblrのemail/passwordでログインしてください、
Dashboard
ダッシュボードはこんな感じ。携帯用なのでシンプルです。
Photoポスト
画像は100pxサイズで表示しています。リンク先は500pxサイズの画像にしてありますので、携帯ブラウザでもなんとか開けるかと。
ナビゲーション
1ページ10件表示していて、新しいページ、トップ、古いページへのボタンがあります。

注意事項

スクリプトの中身をみると分かりますが、入力されたemail/passwordはDBやファイルなどには保存していません。全ての画面でPOSTメソッドで引き回しています。これは、セキュリティ対策が面倒だったってのが大きいですが、遷移がフォームボタンになってしまってアクセスキーが効かないとか不便な制限が発生してしまっているので、今後どうにかしようかな。
あと、期待されていたら申し訳ありませんがreblogはできません。
とにかくダラダラ見るようにと思って作っていますので、そこまで考えていませんでした。リクエストによっては今後実装を考えます。
Docomo P905iでしか動作確認していません。
簡単に実装するために文字コードはUTF-8だし、かなり適当なXHTMLでマークアップしていますが、結構新しめのFOMA機種なら大体うまく動くんじゃないかと思います。
auはUTF-8大丈夫なんでしたっけ?Softbankの人はおとなしくiPhone買いなさいw
このスクリプトを使用して発生するいかなる問題に対して、yagerは責任をとりません。自己責任でお願いします。

まとめ

いつも通り、自分が使いたいだけで作り始めているので色々省略しまくりですが、もし役立つようであればご利用ください。
また「簡単ログイン実装しろ」とか「reblogさせろ」とか色々足りない機能はあると思うのですが、リクエストが多い場合は頑張って対応する可能性もあるのでw、ご意見ご要望をお寄せ下さい。ここのコメント欄とか@yagerとかどこでもOKです。あ、携帯用ならこう作ったら良いよみたいなアドバイスを絶賛募集中です!
ちなみに、Tumblrアカウントはここでヒッソリやってます。
タンヤガー

-WebService, 開発実績

執筆者:

関連記事

EXIF情報を一覧表示するブックマークレット「EXIF EXISTS ?」を作りました

WEBページに表示されている画像のEXIF情報をザザーと一覧表示するブックマークレット(というかWEBサービス)「EXIF EXISTS ?」を作ってみました。 ・EXIF EXISTS ? | ある …

YouTube HD Suiteを新レイアウトに対応しました(2010年4月)

【2010/08/02:追記】 YouTube HD Suite 公式ページができました。 久しぶりにYouTube HD Suiteのアップデートを行いました。 アップデート、インストールは下記リン …

tsudaる 専用Greasemonkey「TweetTheMinutes」

津田さんの著書Twitter社会論の中にあった「tsudaる技術」の解説を読んで、中継としてツイッターを使う場合にある程度登壇者の名前なんかを事前に登録しておいて簡単にツイートできるようにしたら便利か …

ミクシィ【毎月1冊無料】のフォトブック「nohana」が届いたので早速レポート

先日作成したフォトブック「nohana」が先ほど手元に届きましたので、早速仕上がりをチェックしたいと思います。 ・nohana(ノハナ) | 毎月1冊無料で手に入るフォトブック

YouTubeの動画をMP4でRSS化してくれる「MP4TubeRSS」を公開

もうこんな夜中ですが(…)、意外とサクッと形になったので公開しちゃいます。 ・MP4TubeRSS YouTubeの動画をMP4形式でRSS(Podcast)化してダウンロードしやすくしてくれます。 …

スポンサードリンク

スポンサードリンク