今日のパーティーを占ったーの技術的仕様について[sample.php]
最後に,sample.phpについてです.
五月雨的ですみません(うちの教授の名言?迷言?).
<?php session_start(); require_once("OAuth/twitteroauth.php"); $to = new TwitterOAuth($consumer_key, $consumer_secret, $_SESSION['access_token'], $_SESSION['access_token_secret']); //names $name=$_SESSION['screen_name']; //get today number $now = getdate(); $id = $_SESSION['user_id']; //get number for party lists; $total_num=$now[yday]*$now[yday]+$id*2; $party_num[0]=$total_num%8; $party_num[1]=($total_num+mt_rand(1,10))%8; $party_num[2]=($total_num+mt_rand(1,10))%8; $party_num[3]=($total_num+mt_rand(1,10))%8; $hp[0]=mt_rand(1,1000); $hp[1]=mt_rand(1,1000); $hp[2]=mt_rand(1,1000); $hp[3]=mt_rand(1,1000); //variables $hero='勇者'; $soldier='戦士'; $fighter='武闘家'; $wizard='魔法使い'; $pilgrim='僧侶'; $merchant='商人'; $goofoff='遊び人'; $sage='賢者'; $joblist=array($hero,$soldier,$fighter,$wizard,$pilgrim,$merchant,$goofoff,$sage); $contents=("今日のパーティーは${joblist[$party_num[0]]}(@${name}さん):HP$hp[0]、${joblist[$party_num[1]]}:HP$hp[1]、 ${joblist[$party_num[2]]}:HP$hp[2]、${joblist[$party_num[3]]}:HP$hp[3]です。 via 今日のパーティーを占ったー http://bit.ly/gbePlZ #dq3party"); $contents2 = mb_convert_encoding($contents, "UTF-8","SJIS"); //tweet $tweet =$to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>$contents2),"POST"); (中略) ?> <html> html本体 </html>
OAuth認証ページで得られる変数
$_SESSION{'screen_name'},$_SESSION{'user_id'}により,それぞれ,ユーザのTwitterIDと,IDを数値化したものが得られます.
今回,診断結果にはこの数値化されたIDを用いています.
//get number for party lists; $total_num=$now[yday]*$now[yday]+$id*2; $party_num[0]=$total_num%8; $party_num[1]=($total_num+mt_rand(1,10))%8; $party_num[2]=($total_num+mt_rand(1,10))%8; $party_num[3]=($total_num+mt_rand(1,10))%8;
ここが診断結果の肝です.$total_numが数値化されたIDと数値化されたその日の日付を使った診断値です.
これを8で割った余りをユーザの診断結果としています.
次に,残り3人の診断結果がそれ以下の行に書いてあります.mt_rand(1,10)は,1〜10までのランダム値です.これを加算して8で割った余りをパーティの診断結果です.
$hero='勇者'; $soldier='戦士'; $fighter='武闘家'; $wizard='魔法使い'; $pilgrim='僧侶'; $merchant='商人'; $goofoff='遊び人'; $sage='賢者'; $joblist=array($hero,$soldier,$fighter,$wizard,$pilgrim,$merchant,$goofoff,$sage);
8で割ったあまりの8種類の値に対し,配列でジョブを割り振っています.
最後に,診断結果を以下で掃き出し,twitterにポストします.
$contents=("今日のパーティーは${joblist[$party_num[0]]}(@${name}さん):HP$hp[0]、 ${joblist[$party_num[1]]}:HP$hp[1]、${joblist[$party_num[2]]}:HP$hp[2]、${joblist[$party_num[3]]}:HP$hp[3]です。 via 今日のパーティーを占ったー http://bit.ly/gbePlZ #dq3party"); $contents2 = mb_convert_encoding($contents, "UTF-8","SJIS"); //tweet $tweet =$to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>$contents2),"POST");
$contentsが生データです.ここで大事なのが,Twitterにポストする際,そのままだと文字化けが生じてしまうため,SJIS->UTF-8へ変換する必要があります(超重要)
最後の行で,$contents2をPOSTしてツイートができ,タイムラインに反映されて終了です.
今回,診断結果を勝手にツイートする!という部分に無駄にこだわりをいれたためこんな形になりました.本来であれば,診断結果に対し,ユーザのコメントとか入れられるとUI的には面白いんですが,それだと診断メーカーとなにも変わらないので.
意図せずツイートされてしまった!状態を作りたかっただけですw
というわけで,3回にわたりお送りしてきた(ホントはこれが言いたかったけど全部1日で更新してしまいましたが^^;)ソースコード晒し,いかがでしたでしょうか.またオモローなものを作っていきたいと思います.