mixi graph apiのログイン状況の取得

このQ&Aのポイント
  • mixi graph apiを使用して、ログイン状況を取得する方法について説明します。
  • file_get_contents関数を使ってAPIから情報を取得する際にエラーが発生した場合、原因としてスコープ指定の間違いが考えられます。
  • PHP初心者の場合、正しい記述方法が分からないこともあるため、エラーメッセージやドキュメントを参照しながら試行錯誤すると良いでしょう。
回答を見る
  • ベストアンサー

mixi graph apiのログイン状況の取得

xamppの1.7.7(Apache 2.2.21/PHP 5.3.8)上でmixi graph apiのテストをしています。 使用言語はPHPです。 developerサイトのpeopleAPIに関するページは下記URLです。 http://developer.mixi.co.jp/connect/mixi_graph_api/mixi_io_spec_top/people-api/#toc-5 # アクセストークンを抽出 $my_array = json_decode($atdata,true); $at = $my_array["access_token"]; # ログイン状況の取得 $people_api_url = "http://api.mixi-platform.com/2/people/@me/@self?fields=lastLogin?oauth_token=".$at; $people = file_get_contents($people_api_url); echo '<br />'.$people; 上記のfile_get_contentsに対して、failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Requestが出てしまいます。 ちなみにscopeの指定は、 $url = $authorization_url."?client_id=".$consumer_key."&response_type=code&scope=r_profile_last_login&display=pc"; で行なっています。 scopeをr_profileにして、 $people_api_url = "http://api.mixi-platform.com/2/people/@me/@self?oauth_token=".$at; のように変えると、同じpeopleAPI内の友人一覧の取得に関しては取得できるため、scopeの指定が間違っているのだと思うのですが…… 何が間違っているのかわかりません。 PHP初心者でまだわからないことだらけですが、もし何か記述方法の間違い等少しでもわかる方がいれば教えて頂けると幸いです。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • tomaju
  • ベストアンサー率76% (84/110)
回答No.1

> # ログイン状況の取得 > $people_api_url = "http://api.mixi-platform.com/2/people/@me/@self?fields=lastLogin?oauth_token=".$at; クエリ文字列のパラメータの fields と oauth_token の区切りに ? が入ってますが、 ここは & ですかね... fields=lastLogin&oauth_token=".$at また scope の指定ですが、r_profile_last_login だけでは 403 Forbidden になってしまいます。 r_profile と r_profile_last_login の両方が要るようです。 空白区切りで列挙してください。 例: $scope = "r_profile r_profile_last_login"; $url = $authorization_url."?client_id=".$consumer_key."&response_type=code&scope=".urlencode($scope)."&display=pc";

ponponpon321
質問者

お礼

お礼が遅くなってしまい申し訳ありません。 ?を&にすることで無事に動きました。 助かりました、ありがとうございます。

関連するQ&A

  • 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
  • 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
  • ツイッターのAPIでOAUTH認証を使用してのAPIリクエストについて

    ツイッターのAPIでOAUTH認証を使用してのAPIリクエストについて ツイッターのAPIを利用してアプリケーションを開発しています。 OAUTH認証でアクセストークンの取得まではできたのですが、 アクセストークンを使ってAPIにアクセスしたところページが 存在しないとの旨を伝えられました。 ↓実際のソース https://twitter.com/1/statuses/update.xml?in_reply_to_status_id=自分のID(アクセストークンで取得したもの)&oauth_consumer_key=OAUTHコンシューマキー&oauth_nonce=ランダム文字列&oauth_signature_method=HMAC-SHA1&oauth_timestamp=タイムスタンプ&oauth_token=アクセストークン&oauth_version=1.0&status=つぶやきたい内容&oauth_signature=署名 上記URLにheader()(リダイレクト)でアクセスしています。simplexml_load_file()や file_get_contents();だと何も取得できませんでした。 特に不安なのがin_reply_to_status_idの指定先と実際のリクエストの仕方が良く わからない事です。何とかして呟きたいのでご教示よろしくお願いいたします。

  • Twitter APIのリファレンスサイト(Twi

    Twitter APIのリファレンスサイト(Twitter Developer Documentation)の読み方が分かりません... Twitter API使い方というよりは、”ドキュメントの読み解き方” が質問したいことの本質です 。 まずこのページなのですが... https://dev.twitter.com/oauth/reference/post/oauth/request_token Parametersには項目が2つしかないのに、 サンプルのリクエストにはパラメータが7つあるように見えます... 明らかにおかしくないですか? ここでの「Parameters」はどういう意味なんですか? どうして「oauth_callback」と「x_auth_access_type」の2つのパラメータだけを取り上げて説明しているのでしょうか... 全てのパラメータについての説明があるページはないのでしょうか... ※TwitterAPIについて分かりやすく説明している非公式のサイトなどの紹介は不要です。 公式のドキュメントを読み解いて理解したいのです。

  • はてなブックマーク件数取得APIをPHPで使うには

    はてなブックマーク件数取得API http://developer.hatena.ne.jp/ja/documents/bookmark/apis/getcount 上記のページを見て、 http://api.b.st-hatena.com/entry.count?url=[ブックマーク数を取得したいURL] でブックマーク件数が取得できることが分かったのですが、 このブックマーク件数をPHPの変数に入れるには一体どうすればいいのでしょうか。 例えば、変数 $num に int型で指定URLのブックマーク数を入れるようなことがしたいのですが…。

    • ベストアンサー
    • 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
  • codebird:リクエストトークンが取得できない

    codebirdでWordpressに『Twitterでログイン』機能を作ろうとしているのですが しょっぱなのrequest_token取得からつまづいてます コードはcodebirdのgitのサンプルコードそのままです $reply = $cb->oauth_requestToken(array('oauth_callback' => 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']));//ここで取得失敗 $var_dump($reply);//出力 ↓ object(stdClass)#2 (2) { ["message"]=> string(44) "Failed to validate oauth signature and token" ["httpstatus"]=> int(401) } みたいなカンジです 同アプリケーションにて自分のTwitterアカウントにaccess_tokenを発行して codebirdでタイムラインを取得できることは確認しています codebird自体は稼働しているしconsumer_keyは間違っていないはずです dev.twitterのアプリケーションのsettingでは Sign in with Twitterはyesになっています またTwitterAPIの仕様が変わったんでしょうか? よろしくお願いします

    • ベストアンサー
    • 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
  • mixiアプリモバイルOAuth Signatur

    mixiアプリモバイルにて、 gpsから位置情報を取得した際のOAuth Signatureの検証方法 について、ご存じの方がおられましたら、ご教授お願い致します。 言語はjavaで書いております。 まず、gpsにて位置情報取得のため、 mixi Developer Centerの記述サンプル(http://developer.mixi.co.jp/appli/spec/mob/get_gps_info/)に従い、 以下のようなURLでリンクを張りました。 (guid=ONもです。) <a href="location:gps?url=http%3A%2F%2Fexample.com%2Ffoo%2F">位置情報を取得する</a> その祭、 mixi側から来るリクエストとAuthorizationヘッダの内容をソートして並べ替えると、 以下のものがありました。(XXの部分は英数字) datum=wgs84 guid=ON lat=XX.XX.XX.XX lon=XX.XX.XX.XX oauth_consumer_key=XXXXXXX oauth_nonce=XXXXXXX oauth_signature_method=XXXXXXX oauth_timestamp=XXXXXXX oauth_version=XXXXXXX opensocial_app_id=XXXXXXX opensocial_owner_id=XXXXXXX あとは、OAuth Signatureの検証方法について (http://developer.mixi.co.jp/appli/spec/mob/validate-oauth-signature/) を参考にして、Signatureを作成したのですが、 Authorizationヘッダのoauth_signatureと生成したsignatureの値が一致しません。 現在、gpsからのコールバックでなければ、 oauth_signatureと生成したsignature値が一致するので、 gpsからのコールバック時は、何か過不足の処理があるのかと思っています。 もし、この辺りの事で、お詳しい方がおられましたら、 ご教授のほど、よろしくお願い致します。

    • ベストアンサー
    • Java
  • 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

専門家に質問してみよう