初回ユーザならデータベースに格納できる質問

このQ&Aのポイント
  • 初回ユーザならmysqlのデータベースに格納する方法がわからない
  • callback.phpから../../index.phpにログインしたScreen_nameを表示する方法がわからない
  • どなたかご教授して頂けませんでしょうか
回答を見る
  • ベストアンサー

0Auth+PHPで初回ユーザならデータベースに

質問は、初回ユーザならmysqlのデータベースに格納し、初回でなければcallback.phpから../../index.phpにログインしたScreen_nameを表示させたいのですが、どうにもうまくいかず、どなたかご教授して頂けませんでしょうか。 よろしくお願い致します。 <?php session_start(); require_once('twitteroauth.php'); define('CONSUMER_KEY', 'xxxxx'); define('CONSUMER_SECRET', 'xxxxx'); // getToken.php でセットした oauth_token と一致するかチェック if ($_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) { unset($_SESSION); echo '<a href="getToken.php">token不一致。最初からどうぞ</a>'; exit; } // access token 取得 $tw = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); $access_token = $tw->getAccessToken($_REQUEST['oauth_verifier']); // Twitter の user_id + screen_name(表示名) $user_id = $access_token['user_id']; $screen_name = $access_token['screen_name']; // 初回ユーザかチェックするロジック ここから分からなくなっています。。。。。。。 mysql_connect ('localhost', 'root', 'xxxx'); mysql_select_db('xxxx'); $user_id = get_current_user_id(); if ($user_id == 0) { $sql = "insert into xxxxx values (user_id char(50), screen_name char(255))"; } else { $user_id=$_POST['user_id']; }

  • PHP
  • 回答数5
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.1

まず思ったのですが… >> $sql = "insert into xxxxx values (user_id char(50), screen_name char(255))"; これなんでしょうか。せめてやるならば(SQLインジェクションの脆弱性を無視してもいいなら) $sql = "insert into xxxxx values (user_id {$user_id}, screen_name '{$screen_name}')"; だと思うのですが… MySQLのカラムについてですが、CHAR型よりもVARCHAR型の方が望ましいです。 user_id → VARCHAR(19) [PRIMARY KEY に設定] screen_name → VARCHAR(20) でいいと思います。 (この先screen_nameの最大長が変わることも見越して) さて、 >> // 初回ユーザかチェックするロジック ここから分からなくなっています。。。。。。。 >> mysql_connect ('localhost', 'root', 'xxxx'); >> mysql_select_db('xxxx'); >> $user_id = get_current_user_id(); >> if ($user_id == 0) { $sql = "insert into xxxxx values (user_id char(50), screen_name char(255))"; >> } else { $user_id=$_POST['user_id']; >> } この部分ですが、これ全部NGです。まず非推奨のMysql関数を使っている時点でダメだし、エラーチェックも行ってないあたりもダメです。 PHPでデータベースに接続するときのまとめ http://qiita.com/mpyw/items/b00b72c5c95aac573b71 上記ようにPDOをそのまま用いてもいいのですが、そのままだと若干使いにくいために、それを使いやすいように私が拡張したクラスがあるのでぜひ使ってみてください。面倒なオプション設定で基本的に必要なものは自動で設定してくれるのも強みです。 PDO2 / PDOStatement2 https://github.com/Certainist/PDO2 また、twitteroauthの上位互換的なライブラリも自作しているので、こちらも紹介しておきます。twitteroauthと基本的な使い方はほとんど同じですが、それよりも多くの機能をサポートしています。 UltimateOAuth https://github.com/Certainist/UltimateOAuth SQL実行の流れとしては、 「user_idが登録済みであればscreen_nameをUPDATE、そうでなければINSERT」 という形を取ります。screen_nameは後から変更できてしまうので、こちら側でも何らかの変更手段が必要となるからです。以下のサンプルソースは全角スペースでインデントしています。 【prepare.php】 <?php require_once 'UltimateOAuth.php'; session_start(); $_SESSION['uo'] = new UltimateOAuth('xxxx', 'xxxx'); $res = $_SESSION['uo']->post('oauth/request_token'); if (isset($res->errors)) {  die(sprintf('Error[%d]: %s',   $res->errors[0]->code,   $res->errors[0]->message  )); } header('Location: ' . $_SESSION['uo']->getAuthorizeURL()); 【callback.php】 <?php require_once 'UltimateOAuth.php'; require_once 'PDO2.class.php'; require_once 'PDOStatement2.class.php'; session_start(); try {    if (!isset($_SESSION['uo'])) {   throw new RuntimeException('session timeout', -1);  }  if (!isset($_GET['oauth_verifier'])) {   throw new RuntimeException('no oauth_verifier', -1);  }  $res = $_SESSION['uo']->post('oauth/access_token', array(   'oauth_verifier' => $_GET['oauth_verifier']  ));  if (isset($res->errors)) {   throw new RuntimeException(    $res->errors[0]->message,    $res->errors[0]->code   );  }    $pdo = new PDO2(   'mysql:dbname=xxxx;host=localhost;charset=utf8',   'root',   'xxxx'  );  $sql = implode(' ', array(   'INSERT INTO xxxx(user_id, screen_name)',   'VALUES(?, ?)',   'ON DUPLICATE KEY',   'UPDATE screen_name = ?',  ));  $pdo->prepare($sql)->execute(array(   $_SESSION['uo']->user_id,   $_SESSION['uo']->screen_name,   $_SESSION['uo']->screen_name  ));    header('Location: http://example.com/index.php'); } catch (PDOException $e) {    echo 'Error[-1]: database error'; } catch (Exception $e) {    printf('Error[%d]: %s',   $e->getCode(),   $e->getMessage()  ); } 【index.php】 if (!isset($_SESSION['uo']->user_id)) {  die('Error[-1]: Unauthorized'); } echo 'Hello, ' . $_SESSION['uo']->screen_name;

moimoi64
質問者

お礼

To_aru_User様 下記の使わさせて頂いております。 require_once 'UltimateOAuth.php'; require_once 'PDO2.class.php'; require_once 'PDOStatement2.class.php'; またprepare.php,callback.phpも同様に使わせてもらい、挑戦しているのですが、 index.phpの<body>直下に <?php if (!isset($_SESSION['uo']->user_id)) {  die("Error[-1]: Unauthorized"); } ?> を入れますと、 Fatal error: Call to undefined function  die() と出てしまい、exitを変わりしてみたのですが、同じエラーが出てしまいました。 ちなみに<?php echo 'Hello, ' . $_SESSION['uo']->screen_name; ?>表示させたい所においております。 また初歩的なことなのですが、上記IFを除いてindex.phpからprepare.phpがあるディレクトリにリンクをして、ページが変わると、 Warning: require_once(UltimateOAuth.php): failed to open stream: No such file or directory in /home/users/2/lolipopxxx/web/dist/PHP/prepare.php on line 4 Fatal error: require_once(): Failed opening required 'UltimateOAuth.php' (include_path='.:/usr/local/php5.4/php') in /home/users/2/lolipop.jpxxx/web/dist/PHP/prepare.php on line 4 と表示されてしまいます。ディレクトリーはindex.php以外PHP/の中に全て入れております。 まだcallback.phpまでたどりつけてないのですが、 Parse error: syntax error, unexpected ' if' (T_STRING) line10   line 10↓ if (!isset($_SESSION['uo'])) {   throw new RuntimeException('session timeout', -1);  }  if (!isset($_GET['oauth_verifier'])) {   throw new RuntimeException('no oauth_verifier', -1);  }  $res = $_SESSION['uo']->post('oauth/access_token', array(   'oauth_verifier' => $_GET['oauth_verifier']  ));  if (isset($res->errors)) {   throw new RuntimeException(    $res->errors[0]->message,    $res->errors[0]->code   );  } 大変ご面倒をおかけて致しまして申し訳ございません。 UltimateoAuthはとても素晴らしそうでぜひ使ってみたいのですが、この未熟者に更なるご教授を頂けましたら幸いです。 お手数をお掛けてして申し訳ございません。。

moimoi64
質問者

補足

ご丁寧にありがとうございます。 早速、調べみます。 また追って。質問をするかもしれませんが、ひとまず、本当にありがとうございます。

その他の回答 (4)

noname#244856
noname#244856
回答No.5

すいません、重要なことを1つ忘れていました。 【○】 require_once 'UltimateOAuth.php'; session_start(); 【×】 session_start(); require_once 'UltimateOAuth.php'; セッションにオブジェクトを入れるときは、先のそのクラス定義を読み込んでおかないと復元に失敗します。全てのファイルでこの順番で記述されているかどうかを確認してください。

moimoi64
質問者

お礼

To_aru_User様 ご返答ありがとうございます。上記の通りに変更を加えたのですが、同様のエラーメッセージが出てしまい。githubからUltimateOAthのライブラリからやり直し、同サイトのindex.php以外は同説明文のままコードを使ってみました。 全て同じディレクトリに入れており、UltimateOAuth.php FULL_URL_TO_THIS_FILE = 'ここにはサイト名を入れてます。'; /* You have to fill here! */ const MULTIPLE_REQUEST_KEY_NAME = '____ULTIMATE_OAUTH_MULTIPLE_REQUEST_KEY____'; twitter認証まではうまくいき、dev.twitterでcallback URLの指定先をhttp://サイト名/callback.phpにしております。 To_aru_User様が作成されたのを実行を何度も繰り返していたのですが、 Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition &quot;UltimateOAuth&quot; of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in lolipop.jp/web/callback.php on line 23 と表記されてしまいます。 こちらはUltimateOAuth.phpの方で何か修正が必要になるのでしょうか。 お助けに大変感謝しております。

noname#244856
noname#244856
回答No.4

>> 『?』については、?の所にアプデコードを書けばいいんですよね えーっと、ちょっとこれは違うような・・・ 例のまとめのURLにアンカーつけました、この部分をまず重点的に読んでください。 http://qiita.com/mpyw/items/b00b72c5c95aac573b71#2-3 とりあえず「?」を含むものとしてSQLを準備しておき、後からその部分に適切な処理をしていろいろな値を埋め込めるということですね。その「適切な処理」は、こちらが変数の型さえ指定すれば後は全部PDO側がやってくれるのでラクです。

moimoi64
質問者

お礼

To_aru_User様 お世話になりっぱなしです。 callback.php // Check session timeout if (!isset($_SESSION['uo'])) { die('Error[-1]: Session timeout.'); } こちらの記載をコメントアウトしとき、 // Check oauth_verifier if (!isset($_GET['oauth_verifier'])) { die('Error[-1]: No oauth_verifier'); } 下記記載のところで、Fatal error: Call to a member function post() on a non-object というエラーが出てしまいます。 // Get access_token $res = $uo->post('oauth/access_token', array( 'oauth_verifier' => $_GET['oauth_verifier'] prepare.phpでは $res = $_SESSION['uo']->post('oauth/request_token'); if (isset($res->errors)) { die(sprintf('Error[%d]: %s', $res->errors[0]->code, $res->errors[0]->message )); } header('Location: ' . $_SESSION['uo']->getAuthorizeURL()); のままで、大丈夫なのですが。。 UltimateOAuth.phpの所はいじってはなく、下記の部分のみに変更をいたしました。 const FULL_URL_TO_THIS_FILE = 'dist/PHP/UltimateOAuth.php'; /* You have to fill here! */ const MULTIPLE_REQUEST_KEY_NAME = '____ULTIMATE_OAUTH_MULTIPLE_REQUEST_KEY____'; Error[-1]: session timeoutが出てしまうエラーと(ブラウザのキャッシュなどはクリアしてます。) どうにもこうにも謎が解けず、彷徨っておりました。 何かお分かりでしたらよろしくお願い致します。 そして、たびたびありがとうございます。

moimoi64
質問者

補足

To_aru_User様 お世話になっております。。 認証後、callback.phpに戻ってくるとError[-1]: session timeoutと表示がされてしまいます。 色々と調べてみたのですが、全く分からず、php.iniの設定なのかなとか思ったり。 session.cookie_lifetime = 0 になっていたので、300に変更してApacheを再起動しても、あまり意味がなく、同じエラーメッセージがブラウザに表示されてしまいます。 $pdo = new PDO2('mysql:dbname=LAA0429201-twitter; host=mysql0xxxxx;charset=utf8','LAAxxxxx', 'password'); $sql = implode('', array('INSERT INTO twit (no, user_id, screen_name)', 'VALUES(?, ?, ?)', 'ON DUPLICATE KEY', 'UPDATE screen_name = ?',)); $pdo->prepare($sql)->execute(array($_SESSION['uo']->user_id, $_SESSION['uo']->screen_name, $_SESSION['uo']->screen_name)); とここが問題なのか、問題箇所の特定が出来ておらず、調べているのですが、もし何かご存知であれば、ご教授頂ければ幸いです。 あー

noname#244856
noname#244856
回答No.3

>> Fatal error: Call to undefined function  die() ↑明らかに「 die()」って全角スペース入っていますよね・・・w exit() や die() は基本的な言語構造であり、バージョンによって左右されることはPHP5以降ではあり得ません。 http://php.net/manual/ja/function.exit.php header関数でLocation指定するときはHTTPから始まる絶対URLにしてください。その際、書式は厳格に守ってください。 ○ 'Location: http://...' × 'Location : http://...' × 'Location :http://...' >> もしscreen_nameが変わっていた時に、データベースをアプデしてくれる記述になるのですよね!? そうですね。SQL文自体はそうなっています。長くて見にくいので、配列として適当に切り分けておき、implode関数で半角スペースを挿入して最後に結合しています。 INSERT ... ON DUPLICATE KEY UPDATE 構文 http://dev.mysql.com/doc/refman/5.1/ja/insert-on-duplicate.html

moimoi64
質問者

補足

全角になってました…。顔をから火を吹き出しそなくらい恥ずかしいです。。 Implode関数の所には、半角スペースのみをいれておき、update構文にある『?』にについては、?の所にアプデコードを書けばいいんですよね。 あまりにも初心なので、PHP逆引き辞典を購入しましたw 本当に助かっています。 頂きましたURLを精読したのち、またご質問をさせて頂く事があるかもしれませんが、お忙しい所申し訳ないのですが、 不明点がありました、またご質問させて頂ければなぁと。 感謝だけの言葉だけでは足りず、ハグしたい気分ですw(他意はありませんw) ちょっと戦ってみます。 本当に感謝、そして、詳しいお方がいらっしゃった事に助かっています。 ありがとうございます。

noname#244856
noname#244856
回答No.2

重要↓ >> 以下のサンプルソースは全角スペースでインデントしています。 OKWaveは半角スペースだとインデントが崩れるので・・・w テキストエディタの機能で全角スペースを全て半角スペース2個分に置換すればちょうどよくなると思います。 あとindex.phpの訂正だけ・・・ 【Before】 if (!isset($_SESSION['uo']->user_id)) {  die('Error[-1]: Unauthorized'); } echo 'Hello, ' . $_SESSION['uo']->screen_name; 【After】 <?php require_once 'UltimateOAuth.php'; session_start(); if (!isset($_SESSION['uo']->user_id)) {  die('Error[-1]: Unauthorized'); } echo 'Hello, ' . $_SESSION['uo']->screen_name; あと >> Warning: require_once(UltimateOAuth.php): failed to open stream: No such file or directory in /home/users/2/lolipopxxx/web/dist/PHP/prepare.php on line 4 これが出るということはパスがずれていますね。「prepare.php」「callback.php」「UltimateOAuth.php」3ファイルが同一階層 にあることを想定してコードは提示しました。また「index.php」がもし「../../index.php」という位置づけであるならば、当然 require_once 'UltimateOAuth.php'; は(ディレクトリfoo,barを例として) require_once 'foo/bar/UltimateOAuth.php'; としなければなりません。

moimoi64
質問者

補足

To_aru_User様 本当に何から何までありがとうございます。自分も半角やディレクトリーの設定などのミスなどお恥ずかしい限りです。。こちらの問題は解決致しました。ありがとうございます! ご迷惑ついでに、お伺いをしたいのですが、 beforeに記述されています。 if (!isset($_SESSION['uo']->user_id)) {  die('Error[-1]: Unauthorized'); } なのですが、 Fatal error: Call to undefined function  die() とどうしても出てしまいます。 php5.4を使っているのですが、それと関係があるのでしょうか。 また認証する所まではいけました。ただcallback.phpの画面が真っ白でリダイレクトしてくれてないのです。。 require_once 'UltimateOAuth.php'; require_once 'PDO2.class.php'; require_once 'PDOStatement2.class.php'; これらは同じcallback.phpと同じディレクトリーにあるので、そのまましており、 session_start(); try { if (!isset($_SESSION['uo'])) { throw new RuntimeException('session timeout', -1); } if (!isset($_GET['oauth_verifier'])) { throw new RuntimeException('no oauth_verifier', -1); } $res = $_SESSION['uo']->post('oauth/access_token', array( 'oauth_verifier' => $_GET['oauth_verifier'] )); if (isset($res->errors)) { throw new RuntimeException( $res->errors[0]->message, $res->errors[0]->code ); } 上記の記載は、そのままにしており、 あとは考えらるのが、明らかに自分のミスが原因だと思われる。 $pdo = new PDO2('mysql:dbname=xxxx;host=localhost;charset=utf8','root', 'password'); //ここから。。。。 $sql = implode(' ', ←混乱なうです。。。 array(INSERT INTO xxxxx '(user_id, screen_name)', 'VALUES( VARCHAR(19), VARCHAR(20))', 'ON DUPLICATE KEY', 'UPDATE screen_name = ?')); ←もしscreen_nameが変わっていた時に、データベースをアプデしてくれる記述になるのですよね!? $pdo->prepare($sql)->execute(array($_SESSION['uo']->user_id, $_SESSION['uo']->screen_name, $_SESSION['uo']->screen_name)); header('Location: ../../index.php'); } catch (PDOException $e) { echo 'Error[-1]: database error'; } catch (Exception $e) { printf('Error[%d]: %s', $e->getCode(), $e->getMessage()); } あまりにも質問が多く、そして懇切丁寧にご指導して頂いており、本当に申し訳ないです。。 でもとても勉強になり、悪夢からも開放されてきていますw ありがとうございます。

関連するQ&A

  • twitterのOAuth認証+xml抽出(php

    こんにちは。 PHPのプログラムで分からない部分があるので質問させてください。 twitterAPIを用いてアカウントの情報のxmlを取得し、simplexmlで解析して ・フォロワー数 ・フォロー数 ・リストされている数 ・ツイート数 ・認証アカウントかどうか といったステータスをsimplexml_load_fileで読み込んで、抽出して変数に入れたいのですが・・・ (この変数に入れたステータスで色々と計算をする予定です) エラーが出てファイルを読み込んでくれません。 ユーザー情報を取得するAPIが認証を通さないといけないため、OAuthを用いて認証しています。 認証が必要のないAPIで返ってきたxmlは問題無くsimplexml_load_fileが使えます。 ちなみにさくらのレンタルサーバーのスタンダードで、PHPのバージョンは5.2.17です。 色々試してみたのですが、何が原因なのか分からないので、ご教授お願いします。 <コード> <?php // twitteroauth.phpを読み込む。 require_once("twitteroauth.php"); // Consumer keyの値 $consumer_key = "******"; // Consumer secretの値 $consumer_secret = "*****"; // Access Tokenの値 $access_token = "******"; // Access Token Secretの値 $access_token_secret = "******"; // OAuthオブジェクト生成 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); $req = $to->OAuthRequest("http://api.twitter.com/1/users/show/id.xml","GET",array("user_id"=>"******")); $xml = simplexml_load_file($req) or die("XMLパースエラー"); ?> <実行結果> Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "<?xml version="1.0" encoding="UTF-8"?> <user> <id>*******</id> <name>******</name> <screen_name>******</screen_name> <location>九州</location> <description>webクリエイ ・・・(以下略)・・・ ;。 &am in /home/*********/www/newfile.php on line 20 XMLパースエラー

    • 締切済み
    • PHP
  • TwitterのAPI制限について

    OAuthを使ってログインしたいと思い色々調べているのですが APIの実行回数の制限についてよく分かりません。 例えば下記のコードでログイン用のURLを取得しています。 TwitterのAPIの制限が1時間に150回となっているのですが 下記のログインURL呼び出しのリクエストはAPI実行回数制限にカウントされるのか? カウントされるのであれば サーバーIP等での実行回数制限になるのか クライアントIP等での実行回数制限になるのか どちらなのでしょうか? サーバーIPでの制限であればまともにサービス展開できませんし 調べてみたのですが確認できませんでした。 ご存知の方がいらっしゃいましたらご教授下さい。 よろしくお願いします。 <? session_start(); require_once("oauth/twitteroauth/twitteroauth.php"); if($_SESSION['oauth_token']===NULL && $_SESSION['oauth_token_secret']===NULL){ $consumer_key = "xxxxxxxxxxxxxxxxxxxxxx"; $consumer_secret = "xxxxxxxxxxxxxxxxxxxxxx"; // OAuthオブジェクト生成 $to = new TwitterOAuth($consumer_key,$consumer_secret); // callbackURLを指定してRequest tokenを取得 $tok = $to->getRequestToken("http://xxxxxxxxx/callback.php"); // セッションに保存 $_SESSION['request_token']=$token=$tok['oauth_token']; $_SESSION['request_token_secret'] = $tok['oauth_token_secret']; // サインインするためのURLを取得 $url = $to->getAuthorizeURL($token); print "<a href=\"$url\">サインイン</a>"; } else{ //サインインしていればヘッダーを出力 include("user_header.php"); } ?>

    • ベストアンサー
    • PHP
  • TwitterAPIの検索が使えません。

    TwitterAPIの検索の【GET Search/tweets】の使い方が良くわかりません。 他のはいくつか旨くいった方法で同じように書いているのですが使えないのです。 以下のように書いています。 ==========ここから=========== <?php //twitterAPIライブラリの読み込み require_once('twitteroauth/twitteroauth.php'); //キー $Consumer_key = '*****************'; $Consumer_secret = '*****************'; $Access_token = '*****************'; $Access_token_secret = '*****************'; $conn= new TwitterOAuth($Consumer_key,$Consumer_secret,$Access_token,$Access_token_secret); $para = array('q'=>'test','count'=>'4'); $result=$conn->GET('search/tweets',$para); echo "<pre>"; print_r($result); echo "</pre>"; ?> ==========ここまで=========== するとエラーコード34のエラーが出て取得できません。。。 上記のような書き方で、ツイートするとか指定のIDをフォローするなどは正常に動いているので、キーが違うなどのエラーは無いはずです。 わかる方居ましたらお願いします。

    • ベストアンサー
    • PHP
  • TwitterAPI1.1でGetメソッド(?)の

    perlでフォロワー一覧を取りたいのですがよくわからず困っています。 こちら、 http://pplace.jp/2012/10/1058/ 参考にしてやろうとしているのですが、 使えなくなったとされる1が使えて、1.1のほうがむしろエラーになります。 http://api.twitter.com/1/statuses/followers/TwitterのID.xml → これはOK http://api.twitter.com/1.1/friends/ids.json?screen_name=TwitterのID → エラーになる {"errors":[{"message":"Bad Authentication data","code":215}]} どうやらOauthの失敗とのことですが、、、 簡単なサンプルは動きました。 ---- こちらは確認 つぶやきサンプルです ------------- use strict; use Net::Twitter; my $consumer_key = '' my $consumer_secret = ''; my $token = ''; my $token_secret = ''; my $nt = Net::Twitter->new( traits => [qw/OAuth API::REST/], consumer_key => $consumer_key, consumer_secret => $consumer_secret, access_token => $token, access_token_secret => $token_secret, ); my $result = $nt->update('Hello World'); ----------------------------------------------------- しかし、 そもそも上のようなURL(GETメソッド?)をどうやってOAuthで呼び出すのかがわかりません・・・ perldoc Net::Twitter も見たのですが、それっぽい記述はありませんでした・・・ perlでTwitter1.1のAPIのGetメソッド(?)はどうやって呼び出すのでしょうか・・・

    • ベストアンサー
    • Perl
  • twitterのStreaming apiについて

    PHPとStreamingのGET userを使って 自分のタイムラインのツイートを取得しようと思ったのですが 一度userstreamに接続すると接続しっぱなしになり 最後にはタイムアウトになって終了してしまします うまく回避する方法はないでしょうか? よろしくお願いします <?php // OAuth用ライブラリ「twitteroauth」 require_once 'twitteroauth/twitteroauth.php'; // アプリ登録した際に発行された値を入れて下さい。 $consumer_key = '****************'; $consumer_secret = '********************'; $access_token = '*************************'; $access_token_secret = '*********************'; // オブジェクト生成 $tw_obj = new TwitterOAuth ( $consumer_key, $consumer_secret, $access_token, $access_token_secret); // REST_API指定(今回はタイムラインのREST_API) $tw_rest_api = 'https://userstream.twitter.com/1.1/user.json'; // メソッド指定 $request_method = 'GET'; // オプション指定 $options = array ( 'delimited' => 1950 ); // ユーザータイムライン取得 $tw_obj_request = $tw_obj->OAuthRequest( $tw_rest_api, $request_method, $options); // json形式で取得 $tw_obj_request_json = json_decode($tw_obj_request, true); // 変数生成 $time_line_texts .= ''; // 表示 print($time_line_texts); ?>

    • 締切済み
    • PHP
  • Twitter Oauth認証がエラーになります。

    現在Twitterログインアプリを作りいのですが、 下記のようなエラーが出てしまいます。 Fatal error: Class 'Codebird' not found in /var/www/html/callback.php on line 8 認証にはcodebird.phpというライブラリを使っております。 (https://github.com/mynetx/codebird-php 下記コードのソースもこちらです。) 分かる方がいらっしゃれば教えて原因を教えて頂けると非常に助かります。 宜しくお願い致します。。 以下仕様 <a href="callback.php">twitterでログイン</a> これをクリックすると、callback.phpに飛び認証が行われるという具合です。 callback.php内ではconfig.phpとcodebird.phpを読み込んでます。 以下callback.phpコード var_dump($me); が実行出来ず、先に記したエラーが起きます。 <?php require_once('config.php'); require_once('codebird.php'); session_start(); Codebird::setConsumerKey(CONSUMER_KEY, CONSUMER_SECRET); //上記の定数はconfig.phpに記載しており、スペルミスはありません。 $cb = Codebird::getInstance(); if (! isset($_GET['oauth_verifier'])) { // gets a request token $reply = $cb->oauth_requestToken(array( 'oauth_callback' => 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] )); // stores it $cb->setToken($reply->oauth_token, $reply->oauth_token_secret); $_SESSION['oauth_token'] = $reply->oauth_token; $_SESSION['oauth_token_secret'] = $reply->oauth_token_secret; // gets the authorize screen URL $auth_url = $cb->oauth_authorize(); header('Location: ' . $auth_url); die(); } else { // gets the access token $cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); $reply = $cb->oauth_accessToken(array( 'oauth_verifier' => $_GET['oauth_verifier'] )); // $_SESSION['oauth_token'] = $reply->oauth_token; // $_SESSION['oauth_token_secret'] = $reply->oauth_token_secret; $cb->setToken($reply->oauth_token, $reply->oauth_token_secret); $me = $cb->account_verifyCredentials(); var_dump($me); exit; }

    • 締切済み
    • PHP
  • twitterのbotが動かなくなりました。

    twitterのbotがtwitterAPI1.1へのバージョンアップで動かなくなりました。 当方素人なため、最初製作した時もググりながらでしたのでさっぱりわかりません。 コードを書き直す以外にも何かやらなければならないのでしょうか? 下記以外にもファイルがありますが他にも修正しなければいけないのでしょうか? 易しく教えていただけると助かります。 ↓↓↓bot.phpのコードです↓↓↓ #!/usr/local/bin/php <?php require_once ("./oauth/twitteroauth.php"); //インクルードパスを基準に書いたら何故かコマンドラインからの実行でrequrireされなかったのでこのように相対パスを記述 //以下は、上記URLから取得した内容をコピペ $consumer_key = '**************'; $consumer_secret = '*******************'; $access_token = '***************'; $access_token_secret = '**********************'; //リクエストURL作成、XML取得。ここでは5件取得するよう記述 $keyword = urlencode('**'); $url = "http://search.twitter.com/search.atom?q=".$keyword."&rpp=5"; $xml = simplexml_load_file($url); //for文で5件をリツイート for($i=5;$i>0;$i--){ $id = $xml->entry[$i]->id; //それぞれのつぶやきからidを取得 $id = str_replace('tag:search.twitter.com,2005:','',$id); //使うidの部分だけ抜き取る $endpoint = "http://api.twitter.com/1/statuses/retweet/".$id.".xml"; //エンドポイントURL作成 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); //twitteroauthクラスのインスタンス生成。 $req = $to->OAuthRequest($endpoint,'POST',array()); //リクエスト送信。リツイートされる。 } ?>

    • 締切済み
    • PHP
  • Twitter codebirdでエラーがでます

    http://dotinstall.com/lessons/tw_connect_php_v2 上記のサイトを参考にツイッターでログインするサービスを作りたいのですが、 下記のようなエラーがでてしまいます。 Fatal error: Uncaught exception 'Exception' with message 'Error 77 while validating tificate.' in C:\xampp\htdocs\tw\codebird.php:923 Stack trace: #0 C:\xampp\htdocs\tw\codebird.php(294): Codebird\Codebird->_callApi('POST', 'oauth/request_t...', 'oauth/request_t...', Array, false, false) #1 C:\xampp\htdocs\tw\callback.php(15): Codebird\Codebird->__call('oauth_requestTo...', Array) #2 C:\xampp\htdocs\tw\callback.php(15): Codebird\Codebird->oauth_requestToken(Array) #3 {main} thrown in C:\xampp\htdocs\tw\codebird.php on line 923 認証にはcodebird.phpというライブラリを使っています。 https://github.com/mynetx/codebird-php <a href="callback.php">twitterでログイン</a> これをクリックすると、callback.phpに飛び認証が行われるという具合です。 callback.php内ではconfig.phpとcodebird.phpを読み込んでます。 以下callback.phpコード <?php require_once('config.php'); require_once('codebird.php'); session_start(); \Codebird\Codebird::setConsumerKey('CONSUMER_KEY', 'CONSUMER_SECRET'); $cb = \Codebird\Codebird::getInstance(); if (!isset($_SESSION['oauth_token'])) { // get the request token $reply = $cb->oauth_requestToken(array( 'oauth_callback' => 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] )); // store the token $cb->setToken($reply->oauth_token, $reply->oauth_token_secret); $_SESSION['oauth_token'] = $reply->oauth_token; $_SESSION['oauth_token_secret'] = $reply->oauth_token_secret; $_SESSION['oauth_verify'] = true; // redirect to auth website $auth_url = $cb->oauth_authorize(); header('Location: ' . $auth_url); die(); } elseif (isset($_GET['oauth_verifier']) && isset($_SESSION['oauth_verify'])) { // verify the token $cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); unset($_SESSION['oauth_verify']); // get the access token $reply = $cb->oauth_accessToken(array( 'oauth_verifier' => $_GET['oauth_verifier'] )); // store the token (which is different from the request token!) //$_SESSION['oauth_token'] = $reply->oauth_token; //$_SESSION['oauth_token_secret'] = $reply->oauth_token_secret; $cb->setToken($reply->oauth_token, $reply->oauth_token_secret); $me = $cb->account_verifyCredentials(); var_dump($me); exit; // send to same URL, without oauth GET parameters header('Location: ' . basename(__FILE__)); die(); } // assign access token on each page load $cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

    • 締切済み
    • PHP
  • Twitterでリクエストトークン取得時にエラー

    初歩的な質問で申し訳ありません。 色々と修正してみたのですが、どうしても分からなかったので質問させてください。 TwitterのAPIを利用してbotシステムを作っているのですが、 最初の認証画面のところで、リクエストトークンが取得できなくなってしまいました。 昨日までは正常に動いていたのを確認できていたんですが・・・ ********** 【ソース】 require_once '../twitteroauth-master/twitteroauth/twitteroauth.php'; $api_key = 'xxxxxx'; $api_secret = 'xxxxxxxxxx'; // TwitterOAuth認証を作成 $twitter = new TwitterOAuth($api_key, $api_secret); // トークン情報から認証URLを取得 $request_token = $twitter->getRequestToken('http://hoge.jp/callback.php'); $url = $twitter->getAuthorizeURL($request_token, true); // セッションにデータを保存 $_SESSION["token"] = $request_token["oauth_token"]; $_SESSION["token_secret"] = $request_token["oauth_token_secret"]; // 認証ページ表示 header("Location: $url"); ********** ちなみに、TwitterのAPI取得画面で、Callback URLは設定しています。 また、twitteroauth.phpのhttpファンクションの中でcurl_error($ci)を表示させると、 「Problem with the SSL CA cert (path? access rights?)」 というエラーメッセージが表示されました。 なぜいきなりエラーが起こるようになってしまったのか、何か不備があるのであれば教えていただけないでしょうか。 お知恵を貸していただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Basic認証: PHP_AUTH_USERが

    環境:CentOS6.3, PHP Version 5.3.3, Apache/2.2.15 (CentOS) ,MySQL Server version 5.1.61 (Client API versionも同じ) です。テーブルmembers にname,password の2欄があり、データがそれぞれ、taro , abc と入っています。  ここで phpを下記のように書きました。 1 <?php 2 // データベースに接続      中略 7 8 // 認証処理(Basic認証) 9 if (!isset($_SERVER["PHP_AUTH_USER"])) { 10 header("WWW-Authenticate: Basic"); 11 header("HTTP/1.0 401 Unauthorized"); 12 exit; 13 }else{ 14 var_dump(($_SERVER)." --line_a"."<br />"); 15 print ("ユーザ名:". $_SERVER['PHP_AUTH_USER']." --line_b"."<br />"); 16 17 // 入力されたアカウントが正しいかチェック 18 $result = mysql_query( "SELECT COUNT(id) AS rows FROM `account` WHERE name = $_SERVER [ 'PHP_AUTH_USER' ] AND password = $_SERVER ['PHP_AUTH_PW' ]", $conn); 19 20 echo( $_SERVER [ 'PHP_AUTH_USER' ]."-".$_SERVER ['PHP_AUTH_PW' ]."--line_c"."<br />"); 21 echo($result."--line_d"."<br />"); 以下略 これでブラウザから認証を経てログインすると、 string(20) "Array --line_a " ユーザ名:taro --line_b taro-ptaro--line_c --line_d となって、$result に値が入りません。 18行の WHERE句を外し、 $result = mysql_query( "SELECT COUNT(id) AS rows FROM `account`", $conn) or die("result取得エラー") ; とすると、 string(20) "Array --line_a " ユーザ名:taro --line_b taro-abc--line_c Resource id #3--line_d となり、$result にResource id #3 が返ります。 WHERE句で name = 'taro'  を指定し、 $result = mysql_query( "SELECT COUNT(id) AS rows FROM `account` WHERE name = 'taro' ", $conn) or die("result取得エラー");  とすると、 string(20) "Array --line_a " ユーザ名:taro --line_b taro-abc--line_c Resource id #3--line_d となり、やはり、$result にResource id #3 が返ります。password を追加し、WHERE name = 'taro' AND password = 'abc' としても、Resource id #3--line_d と出ます。 ところが、18行の taro を $_SERVER [ 'PHP_AUTH_USER' ] に置き換え、 $result = mysql_query( "SELECT COUNT(id) AS rows FROM `account` WHERE name = $_SERVER [ 'PHP_AUTH_USER' ] AND password = 'abc'", $conn) or die("result 取得エラー") ; string(20) "Array --line_a " ユーザ名:taro --line_b result 取得エラー となって、$result に値が入りません。 $_SERVER [ 'PHP_AUTH_USER' ] を’’で囲んでも同じ。 何故でしょうか? どのようにすれば不具合の解決ができるでしょうか?

    • ベストアンサー
    • PHP