TweetPhotoという選択


ぽちったーから画像投稿するのにできるだけ楽な方法は何か検討してみました。
http://elazyrest.net/pochitt/info.php


要件
1.twitterの携帯サイトに画像アップロード機能を組み込みたい
2.ストレージは持ちたくない、サービス自体も外部サービスを利用したい
3.ユーザには画像アップロード用に何も設定させたくない(メールアドレス等)、意識させたくない
(※ここでは、oauthについては言及しない)


背景
1.国内の携帯電話では、ウェブブラウザから、ファイルアップロードができないことが多い。
これが一番の問題!
スマートフォン系はのぞく)
代替として、メールに添付して行うことが多い。


2.twitterのアカウントが利用できて、アップロード用APIが公開されているサービスが存在する。
利用しない手はないが、メールサーバを経由しなければならない。

TwitPic, img.ly, Twitgoo, etc

いくつか考えられるが、想定されるシーケンスを2つほど挙げてみる。
例1
a) メールサーバを設定して、twitterアカウント毎にメールアカウントを発行する。
b) 携帯サイトでmailto:で設定されたメールアカウントをクリックする
c) 画像をメールに添付して送信する
d) 受信メールアドレスと緋も付けられたtwitterアカウントで、APIを利用して画像共有サイトへ画像をPOSTする。


※一般的な方法かと思う
※漏洩時の対策として再設定機能が必要かもしれない


例2
a) メールサーバを設定して、画像投稿用のメールアカウントを1つ(別ユーザでも同一アカウント)発行する。
b) 携帯サイトでmailto:で設定されたメールアカウントをクリックする
c) 画像をメールに添付して送信する
d) 携帯サイトでは、初めて送信元のメールアドレスから画像が投稿された場合は、ユーザに確認メールを返す。2回目以降は、fに進む。
e) 確認メールにあるリンクをクリックすると、twitterアカウントでの認証画面が表示され、認証が完了すると送信元メールアドレスとtwitterアカウントがひもづけられる。
f) 送信元メールアドレスと緋も付けられたtwitterアカウントで、APIを利用して画像共有サイトへ画像をPOSTする。


ドメインの受信拒否、許可設定してもらう必要がありそう。
※送信元アドレスを管理する画面は必要になりそう?


3.さらに探してみると、メールでの投稿が可能で、APIにて送信先メールアドレスの取得が可能なサービスが存在した。
http://groups.google.com/group/tweetphoto/web/fetch-user-settings
他にもメールでの投稿は可能な画像共有サイトは存在するが、送信先のメールアドレスを自動で取得できなかったりする。
私が把握しているのは今のところhttp://www.tweetphoto.com/index.phpのみ。ご存知でしたら教えてください__
これで、携帯サイトでは、メールアドレスをリンクさせとくだけでよくなる。


a) 画像共有サイトのAPIを利用して、送信先メールアドレスを取得する。
b) 携帯サイトでmailto:で設定されたメールアドレスをクリックする
c) 画像をメールに添付して送信する

※ユーザの利用シーケンスは(2.例1)とほとんど変わらない。
※携帯サイトで事前に何も設定する必要がない


おぉー
求めていたのは、これです!
http://twitter.com/kazkicks/status/3140967163


これでサクッと、画像投稿をサポートできます。


ただし、以下の問題点があります。


日本語が文字化けします。(※結構いたい!)
※tweetphotoからplixiにサービス名が変わり、日本語にも対応したようです。
APIで、直接ポストするわけではないので、sourceにアプリケーション名を設定したりできない。



柔軟に対応したい場合は、2の方法を取ってください__
とりあえずアップロードできればよい人は楽ができると思います。


以下、TweetPhotoから画像アップロード用のメールアドレスを取得するサンプルコードです。

<?php
function simplexml_load_with_get($url, $querys=array(), $headers=array()) {
        $data = "";
        if ($querys) {
                foreach ($querys as $key => $value) {
                        if ($data != "") {
                                $data .= "?";
                        }
                        $data .= $key."=".urlencode($value);
                }
        }
        $header = array();
        if ($headers) {
                foreach ($headers as $key => $value) {
                        array_unshift($header, $key.": ".$value);
                }
        }
        $ch = curl_init();
        if ($data != "") {
                if (ereg("\?", $url)) {
                        $url .= "&".$data;
                }
                else {
                        $url .= "?".$data;
                }
        }
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        //curl_setopt($ch, CURLOPT_MAXREDIRS, 20);
        if ($headers) {
                curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $res = curl_exec($ch);
        $info = curl_getinfo($ch);
        curl_close($ch);
        if ($info['http_code'] != 200) {
                return $info;
        }
        else {
                return simplexml_load_string($res);
        }
}

function getTPMailAddr($screenName, $password) {
        $header = array(
                "TPAPI" => $screenName.",".$password
        );

        $profile = simplexml_load_with_get("http://tweetphotoapi.com/api/tpapi.svc/signin", null, $header);
        if (isset($profile['http_code'])) {
                echo "signin error:" .$profile['http_code'];
                return false;
        }
        $id = $profile->Id;
        $setting = simplexml_load_with_get("http://tweetphotoapi.com/api/tpapi.svc/users/$id/settings", null, $header);
        if (isset($setting['http_code'])) {
                echo "setting error:" .$setting['http_code'];
                return false;
        }
        return $setting->Email;
}

echo getTPMailAddr("screename", "password");
?>

最終行から2行目の"screenname"と"password"は差し替えてください__



http://twitter.com/TweetPhoto/status/3376923315
3日間ほどTweetPhoto経由で、ログインできなくなっていた現象が発生していて、ブログの投稿ができませんでしたw