しかし、2013/7/31現在、Unityの新規プロジェクトにインポートしても、正常に動きません。
私は2013/6/10にLet's Tweet In Unityの動作確認をしていたのでしたが、
なんとまさにその翌日、2013/6/11にTwitter API 1.0が停止し、
API 1.1に対応していないLet's Tweet In Unityは動かなくなる、という事態になったのです。
なんとまさにその翌日、2013/6/11にTwitter API 1.0が停止し、
API 1.1に対応していないLet's Tweet In Unityは動かなくなる、という事態になったのです。
今はデモを動作させても、こんなエラーが出るようになってしまいました。
原因は、Let's Tweet In Unityの内部コードがAPI 1.0を利用していたせいです。
Let's Tweet In Unity内部にOAuth認証のコードはもともと揃っているので、
API 1.1を使用するように書きなおしてみました。
API 1.1を使用するように書きなおしてみました。
Twitter.csの176行目に、URL指定があります。
private static readonly string PostTweetURL = "http://api.twitter.com/1/statuses/update.xml?status={0}";
これを、API 1.1用に変更します。
private static readonly string PostTweetURL = "https://api.twitter.com/1.1/statuses/update.json?status={0}";
httpがhttpsになり、バージョン指定の数字が1.1になり、最後に拡張子がxmlからjsonに変わります。
これだけで動くようになれば楽なのですが、残念ながらそうはいきませんでした。
さらに、193~201行目の
を、こう変更します。
phpに届いた $_POSTの内容を print_r($_POST); で表示すると、こうなります。
こういうデータになってれば大丈夫ということです。
これだけで動くようになれば楽なのですが、残念ながらそうはいきませんでした。
さらに、193~201行目の
// Need to fill body since Unity doesn't like an empty request body. byte[] dummmy = new byte[1]; dummmy[0] = 0; // HTTP header Hashtable headers = new Hashtable(); headers["Authorization"] = GetHeaderWithAccessToken("POST", url, consumerKey, consumerSecret, response, parameters); WWW web = new WWW(url, dummmy, headers);
を、こう変更します。
WWWForm form = new WWWForm(); string str = GetHeaderWithAccessToken("POST", url, consumerKey, consumerSecret, response, parameters); str = str.Replace("\"",""); string[] p = str.Split(','); p[0] = "status=" + UrlEncode(text); foreach (string obj in p){ string[] tmp = obj.Split ('='); form.AddField(tmp[0], tmp[1]); } WWW web = new WWW("http://yourserver.com/tweet.php", form);
原型を留めてないぐらい変えました。
唐突に出てきた yourserver.com というのは、自前でサーバを用意する必要があるということです。
API 1.1 での投稿に必要なパラメータは揃っているにも関わらず、なぜか直接
api.twitter.comへの送信を行なっても、どうしても成功しませんでした。
そこで、自前サーバにパラメータを送り、phpでtwitterにパラメータを送信してもらうという形をとりました。
唐突に出てきた yourserver.com というのは、自前でサーバを用意する必要があるということです。
API 1.1 での投稿に必要なパラメータは揃っているにも関わらず、なぜか直接
api.twitter.comへの送信を行なっても、どうしても成功しませんでした。
そこで、自前サーバにパラメータを送り、phpでtwitterにパラメータを送信してもらうという形をとりました。
$str = ""; foreach ($_POST as $key => $value){ $str .= $key."=".$value."&"; } $str = substr($str,0,strlen($str)-1); $opts = array( 'http'=>array( 'method'=> 'POST', 'content'=> $str ) ); $context = stream_context_create($opts); file_get_contents("https://api.twitter.com/1.1/statuses/update.json",0,$context);
これが、そのサーバ側のtweet.phpの内容です。
パラメータは揃っているので、形を整えてapi.twitter.comに送信するだけですね。
Array ( [status] => test2 [oauth_consumer_key] => zUAiZ5W0sAnLTrbwjEibGA [oauth_nonce] => 178919DE [oauth_signature_method] => HMAC-SHA1 [oauth_timestamp] => 1375233480 [oauth_token] => 126559571-GQoRFeEkeum8kB1PqIfJiBjj0L8MH36Iumsy1Vgg [oauth_version] => 1.0 [oauth_signature] => 3ZpEhBQDv0rYmPCNapxbd2yoWdY%3D )
こういうデータになってれば大丈夫ということです。
Array ( [http] => Array ( [method] => POST [content] => status=test2&oauth_consumer_key=zUAiZ5W0sAnLTrbwjEibGA&oauth_nonce=178919DE&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1375233480&oauth_token=126559571-GQoRFeEkeum8kB1PqIfJiBjj0L8MH36Iumsy1Vgg&oauth_version=1.0&oauth_signature=3ZpEhBQDv0rYmPCNapxbd2yoWdY%3D ) )
$optsの内容を print_r($opts); で表示すると、こうなります。
0 件のコメント:
コメントを投稿