CakePHPを使った携帯用twitterクライアントの k-twi に関して色々。

かなり前にCakePHPを用いて携帯用のWEBクライアントを作った。
http://d.hatena.ne.jp/hosimitu/20100213/1266067360
それをGitHubにも公開している。
https://github.com/hosimitu/k-twi


CakePHPGitHub共に自分の勉強用に適当にしてたのだけど、
今回使ってくださる方がいらっしゃったのでそのやり取りを公開。
あと少しいじった。


kadi_ri@hosimitu いきなりのリプライ失礼します。k-twiのソースをお借りして課題を作ろうとしているのですが、初歩的な部分でつまずいております。大変失礼かと思われますが、よろしければ質問してもよろしいでしょうか…?link
hosimitu@makikadi 構わないですよ。なのですが、今出掛けてますので返信が遅れるもしくは夜になってしまいます。link
kadi_ri@hosimitu ありがとうございます、こちらも環境を整え質問を纏めてからリプライ致します。基本的な部分から質問しなければわからない段階なので、お手数おかけするかと思われますが、是非ともお願いいたします。link
hosimitu@makikadi 了解です。また適当にリプライ飛ばしていただければ、返信しますね。link
kadi_ri@hosimitu phpに関する知識が全く無いのでほぼ0から質問させて頂きます。レンタルサーバーへのCakePHPインストールまでは済ませました。ルートディレクトリ直下にcakeフォルダを作成し中にapp/cake/plugin等のフォルダがあります。link
kadi_ri@hosimitu 使い方に書いてあるコントローラー、モデル、ビューをそれぞれ配置というのはどこに置けばいいのでしょうか。link
hosimitu@makikadi それぞれ app/cake/controllers と app/cake/models と app/cake/views です。link
kadi_ri@hosimitu appフォルダ内にcakeフォルダは無いのですが、cakeフォルダを作成して入れればいいのでしょうか?link
hosimitu@makikadi すみません^^; 自分の環境のままコピペしてました・・・。 正しくは app/controllers と言う風な感じです。cakePHPを配布元からダウンロードしてきて解凍したら同じ名前のフォルダがあるはずです。link
kadi_ri@hosimitu ありがとうございます。app内に上書きしました。解凍した中のwebrootフォルダも同様にapp内に上書きすればよいのでしょうか?link
hosimitu@makikadi それでいけると思います。link
kadi_ri@hosimitu 今の段階でアクセスをすると、http://twitpic.com/3u5i75 ←のようなエラーが出てしまいます。自分ではこの段階で躓いてしまいました。link
hosimitu@makikadi 申し訳ないです。エラーコードだけ見ても原因がどこかわかるレベルじゃないです。ただ、configフォルダ内のroutes.phpとかをアップロードし忘れてたみたいです。今から準備しますので少々お待ちを。link
hosimitu@makikadi 話は変わりますが、k-twiを入れる前にcakephpだけで動作確認はされましたか?link
kadi_ri@hosimitu http://bit.ly/goUGCr ←こちらを参考に設定を行い、全てグリーンの状態までは確認致しました。link
hosimitu@makikadi グリーンになっているならバッチリですね。 http://bit.ly/hFtsF4 これをダウンロードし、解凍したら入っている routes.php をconfigフォルダ内に上書きしてください。 これだけで解決しないと思いますが・・・。ちょっと調べてみます。link
kadi_ri@hosimitu 上書きしてみました。エラー文に変りなしです。お手数お掛けいたします…。link
hosimitu@makikadi 『OAuth consumer component』 と 『KtaiLibrary』 は導入されましたか?link
kadi_ri@hosimitu 両方共に先ほどと同じくapp内に放り込んだりはしてみましたが、設定などがわからずにつまっておりました。今はどちらもいれておりません。link
hosimitu@makikadi エラーコードの『undefined variable』は以下の関数が未定義ですよ、と言うエラーだそうです。で、さきほどの画像の下の方で言うとktaiって言う関数が未定義ですよと言う意味で、default.ctpを開くと$ktaiと言うものがあり――link
hosimitu@makikadi ――それは『KtaiLibrary』由来のものです。なので『KtaiLibrary』を入れればエラーを消す一歩にはなると思います。link
kadi_ri@hosimitu ではKtaiLibraryのreadmeに沿ってインストールを行ってみます。また躓いてしまうと思いますので申しわけありませんがよろしくお願いします。link
hosimitu@makikadi ぜひやってみてください。こちらもすぐに答えれるか、正しい答えかどうかわかりませんが手伝えればなと思います。また気軽にリプライどうぞーlink
kadi_ri@hosimitu ありがとうございます。 http://bit.ly/fSGh8H ←を参考にひと通りの設定を行ったところ、先程の画像で言う下のエラーが消えました。urlの方のエラーはどうすればいいか検討はつきますでしょうか?link
kadi_ri@hosimitu 素人の考えなので違うかもしれませんが、私の環境で導入したCakePHPは最新安定版の1.3.7なのですが、hosimitu様の製作環境が1.2.5なので http://bit.ly/hsXRhS のindex.phpの変更で引っ掛っているのかもしれないです。link
hosimitu@makikadi エラーコードをグーグルで検索するとこんなページが出て来ました。 http://bit.ly/gVIVG2 $urlを削除してみてはどうでしょう?link
hosimitu@makikadi あーそうみたいですね。バージョンのことをすっかり忘れてました。解決方法は1.2のバージョンを使うか、1.3への以降手続きをするかですね。先ほどのリンク先では1.3ではKtaiLibraryが使えないかも、とあるので作るだけなら1.2の方が良いかも知れませんね。link
kadi_ri@hosimitu 単純に$urlを削除したところ、エラーは消えましたが結局何も表示されず…。1.2.5環境でやり直してみようと思います。link
hosimitu@makikadi むぅ・・・。難しいですね。1.2の環境でやってまた何かありましたら気軽にどうぞー。頑張ってくださいね。link
kadi_ri@hosimitu こんにちは、昨日1.2環境でやり直してみたのですが何も表示されず駄目かと思っていたら頂いたroutes.phpに差し替えでトップが表示されました。しかしまだoauthなどがわからず…申し訳ございませんがまた教えていただけないでしょうか。link
hosimitu@makikadi こんにちわー。表示されましたか。oauthに関しては途中までは http://www.hosimitu.com/2010/04/2920-1456.php を見ていただければと思います。twitter側で『Consumer key』などを取得してください。link
kadi_ri@hosimitu ありがとうございます。そちらのキー取得は出来ております。oauthのコンポーネントですがREADMEのリンクからダウンロードしたものの中身vendorsとcontrollers両方を上書きでいいのでしょうか。サイトによってはvendorsしか使っていないので…link
hosimitu@makikadi vendorsとcontrollers両方を上書きしても問題ありません。ただ使うのはcontrollersの方です。正しくはその中にあるcomponentsと言うやつですけどね。link
kadi_ri@hosimitu 上書きしました。中身を見てもどこを変更すればいいのか…。abstract_consumer.phpのconsumerKeyとconsumerSecretは自分のものにへんこうしました。link
hosimitu@makikadi そこができているなら次は user_controller.php の中にある function add() 辺りでのURLを自分が公開するURLに変更する感じですかね。おそらく。link
kadi_ri@hosimitu 自分のURLへ変更してみましたがトップから認証ボタンで飛んでも空白ページのままです。Twitter側のアプリケーション設定ですがブラウザアプリケーション、Read&Write、ログインに使用するでいいのでしょうか。link
hosimitu@makikadi その設定でいけるはずです。コールバック用URLが間違ってたりしませんか?link
kadi_ri@hosimitu コールバックURLは http://自分の設置URL/users/twitter_callback にしています。link
hosimitu@makikadi すみません。今見たらtwitter側の設定でログインに使用するにチェックは入ってませんでした(;´Д`)link
kadi_ri@hosimitu チェックを外してみましたが変化なしですι oauth_consumer.phpの17〜18行目はnullのままでいいのでしょうか?link
hosimitu@makikadi そこはnullで良いですよ。 oauth_consumerフォルダの中にあるtwitter_consumer.phpの値もキチンと設定してありますよね?link
kadi_ri@hosimitu oauth_consumerフォルダの中にはabstract_consumer.phpしかありません…。バージョンが違うのでしょうか…。link
hosimitu@makikadi 今私が使っているバージョンがちょっと分からないんですが、最初に作る時参考にしたサイトは http://d.hatena.ne.jp/hagimi/20091123/p2 これです。一度試す価値はあると思います。link
kadi_ri@hosimitu oauth認証の画面に飛びました!しかし認証して戻ってきたらエラーが…データベース名とかでのエラーでしょうか… http://twitpic.com/3ug8t5link
hosimitu@makikadi おめでとうございます!もうちょっとで動きそうですね。
エラー見ただけではちょっとわからないです(´ω`)データベースは作ってありますか?
link
kadi_ri@hosimitu ありがとうございます><データベースは、適当なテーブル名でREADMEの分をコピペで作ってあります。借りているサーバーでphpMyAdminが使えたのでそちらを利用して作りました。link
hosimitu@makikadi 一番重要そうなエラーは画像にある赤文字のところだと思います。で、そのエラーでググるとどうやらArrayと言うデータベース中のカラムが無いみたいなことを表しているらしいです。先ほどの画像の一番下の4番のところで1,20,NULL〜〜〜Arrayってなっているのがlink
hosimitu@makikadi 無くなれば解決しそうな気がしますね。user_controller.php中の150行、151行目の間にvar_dump($screen_name);とでも入れて何が変数の中に入っているのか確認すると何か糸口が見えるかも知れません。link
kadi_ri@hosimitu object(SimpleXMLElement)#26 (1) { [0]=> string(8) "makikadi" } が返されました…link
hosimitu@makikadi むーこちらと何か違うみたいですね。
解決方法になりそうなのは175行目と191行目にある'screen_name' => $screen_name, を 'screen_name' => $screen_name[0], とするとかですかね?エラーが出るかも
link
kadi_ri@hosimitu http://twitpic.com/3uhxus ←に変わりました。さっぱりですが…。link
hosimitu@makikadi 先ほどの var_dump($screen_name); を削除して、152行目に var_dump($screen_name[0]); とした時何が入っています? settypeのしたに入れて見てください。link
kadi_ri@hosimitu http://twitpic.com/3ui2tw あまり変化していないようなlink
hosimitu@makikadi 原因は148行目から151行目にあるように思います。
私の環境で再度確認してもgithubに上げているコードと同じもので、先ほどのvar_dumpもキチンとscreen_nameが入っていました。
解決の糸口として上から順に変数に何が入っているか・・・続く
link
hosimitu@makikadi 続き・・・var_dumpで確認していきおかしなところを探すしか思いつきません。
まずは手始めにvar_dump($xml);でキチンとtwitterAPIが入っているかどうか確認してください。
link
kadi_ri@hosimitu http://twitpic.com/3uibs8 左の結果となりました。link
hosimitu@makikadi twitterAPIは呼び出せているみたいですね。
$screen_name = $xml->screen_name; の下に var_dump($xml->screen_name); とでも入力してみてください。
link
hosimitu@makikadi object(SimpleXMLElement)#24 (1) { [0]=> string(8) "〜〜〜" } とか表示されていたらそこまではこちらと同じです。link
kadi_ri@hosimitu 150行目の$xml->screen_nameを$xml->user->screen_nameに変更したところ、認証でき、専用ページURLを掃き出しました!!!しかしツイート後の画面でエラーが。。link
hosimitu@makikadi おー!!ついに来ましたね!おめでとうございます! ツイート後にエラーと言う事はtwitter_controller.php の function post() 辺りが怪しそうですね。link
kadi_ri@hosimitu ありがとうございます!本当に感謝し通しです…( ;∀;) エラーですが、 http://twitpic.com/3uikmn ←このような感じです。いい加減頼りっきりですが、何かわかればおねがいしますm(_ _)mlink
hosimitu@makikadi むー。ちょっとわからないですね。エラーコードでググってもさっぱりです。強引に訳すと twitters/postが開く権限を持ってない的な事が書いてありますね。
$req = $this->OauthConsumerとかの行の頭に // でコメントアウトして
link
hosimitu@makikadi 怪しそうな行のあとに echo "aaaa<br />"; とか echo "bbb<br />"; とか書き込んで実行し、どこまで処理が進んでいるのか確かめてから問題箇所の特定をしてみるのはどうですかね?link
kadi_ri@hosimitu $this->render("/twitters/post"); のところで表示位置が変わるということはここがエラーでしょうかね…link
hosimitu@makikadi おそらくそうだと思います。URLがサブディレクトリになってたりとかそう言うのが効いているのかも知れません。link
kadi_ri@hosimitu render系の部分を一個階層上げることで大まかなエラーは消えました!!ただまだちらほらとエラーが残っているのでまたお聞きしたりしたいと思います(/ω\)本当にありがとうございます、大変勉強になりましたし助かりました!link