• 締切済み
  • 困ってます

ツイッターの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の指定先と実際のリクエストの仕方が良く わからない事です。何とかして呟きたいのでご教示よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数499
  • ありがとう数6

みんなの回答

  • 回答No.2

> header()(リダイレクト)でアクセスしています。  というのがどういうことか良くわかりませんが。  発言系のAPIならPOSTリクエストを送信するので、パラメータがちゃんとHTTPヘッダーに設定されている必要があります。URLにパラメータを続けるのはGETリクエストなので、エラーで弾かれるでしょう。  あと、段階的に状況を整理しましょう。 ●そもそもOAUTH認証が出来ているのか?  いきなり発言したりするのではなく、まずはGET系のAPI、例えばtimelineがちゃんと取得できるかとかから確認してみましょう。 ●OAUTH認証の注意点  ・signatureが正しく作成されているか  ・statusはあらかじめHTMLエンコーディングされている必要がありますが、HTMLエンコーディングの仕方によってはTwitter側のチェックで弾かれることがあるようです。  ・パラメータの順番  (APIによってはsignatureに含めないパラメータも存在しますが、それ以外のパラメータはOAUTHに直接関係するしないに関わらずキーのアルファベット順に並んでいる必要があるようです) ●オプション関係はその後からじっくりと確認しましょう

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます。 おっしゃる通りにPOSTリクエストなのにheader(LOCATION)で アクセスしてしまうとGETになってしまいますね。 ご指摘ありがとうございます。 ご教示の通りtimelineを取得しようと http://api.twitter.com/1/statuses/home_timeline.xml にheaderにPOSTを挿入し、 simplexml_load_file(上記で生成したもの)でアクセスしたところ bool(false)と表示されてしまいました。 Oauthが間違っている場合間違っている旨のレスポンスが返ってくると WEBか書籍で見たのですが、ということはURLが間違っているのでしょうか? また、署名やOAUTH認証については絶対に正しいとは言えませんが リクエストトークンやアクセストークンが取得出来ている事から 特に問題ないのではないかと考えています。 しかしながら、ご教示の通り見直すべき箇所が 浮き彫りになってきましたのでもう一度調べなおして みようと思います。 ありがとうございました

  • 回答No.1
  • luka3
  • ベストアンサー率77% (177/228)

実際にプログラムしている訳ではないので単なるアドバイスですが、、、 まずphpですよね? googleで「twitter oauth php」とかで検索すればいろいろとサンプルが見つかりますが、それはもう見てますよね。 で、in_reply_to_status_idですが、これは誰かの発言に対して返信を行うときにその発言のIDを指定します。 ・Twitterクライアント別 in_reply_to_status_idの扱い - H.Hiroのチラシの裏の裏 http://kugyu.info/?page=Twitter%A5%AF%A5%E9%A5%A4%A5%A2%A5%F3%A5%C8%CA%CC+in_reply_to_status_id%A4%CE%B0%B7%A4%A4

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます。 実は「TwitterAPIプログラミング」 という本を参考にして書いたのですが WEBを参考にすると確かに返信の場合に 記述するよう書いてあります。 と、なるとこの項目は削除したほうが良いのかもしれません… ご紹介いただいたURLを参考にさせていただき、 もう少し、調べてみます。

関連するQ&A

  • Twitter APIが利用できない!?

    Twitter APIを利用してWebアプリケーションを作成しようとしています。手始めにローカル開発環境でタイムラインを取得したのですが、レンタルサーバに移すと取得できません。 <?php require_once( 'twitteroauth.php' ); (OAuth認証でアクセストークン等を取得する処理は省略) $TwitterOAuth = new TwitterOAuth('コンシューマキー', 'コンシューマシークレット', 'アクセストークン', 'アクセスシークレット'); // タイムラインを取得 $timeLine = $TwitterOAuth->get('statuses/home_timeline'); (以下、表示処理は省略) ?> PHPを使ってこのように書きました。(今回はライブラリとして、TwitterOAuthを使わせていただきました。) ローカル開発環境でこのプログラムを動かすと、正常に動作しました。 しかし、これをレンタルサーバに移すと、動かなくなります・・・ 以下、状況をまとめました。 ・色々試してみるとレンタルサーバ上においても、OAuth認証はうまくいっている模様。  アクセストークン等は取得できていた。 ・タイムラインの取得処理だけが失敗して、NULLが入ってしまっている。   → Twitter APIへのアクセスができない? ・しかし、$TwitterOAuth->post('statuses/update', array('status' =>'テストツイート'));は  うまくいく。   → 試してみると、GETメソッドのものだけが失敗する模様 ・ライブラリを他の物にして、同じ機能を実装しても同様のことが起こります。  ライブラリ無しで書いてみても同じでした。ローカルではうまくいくのに・・・ ・利用しているレンタルサーバは、さくらインターネットのレンタルサーバ。  もう1つは個人の方が運営しているレンタルサーバ。  どちらもライブラリの動作環境は満たしている。 php.iniの問題でしょうか。 それともTwitter APIの利用できないサーバがあるのでしょうか。 初心者なりに色々考えてみましたがわかりませんでした。 どうしたらよいでしょうか。

    • ベストアンサー
    • PHP
  • OAuth認証でtwitterにアクセスできません

    PHPでOAuth認証でtwitterにつぶやきを投稿するプログラムを作ってます。 twitterの画面までは飛ぶのですが。 こちらです。 このページに対するリクエスト・トークンがありません。アプリケーションがTwitterアカウントを使用するかどうかを確認するために必要な特殊キーです。 送信したサイトまたはアプリケーションに戻って再度お試しください。何らかの手違いがあったかもしれません。 という文章が出てきて、アプリ認証画面に飛びません。 twitterのdeveloperのページでちゃんと登録して、キーなどはちゃんと入力しました。 今はローカルで試しています。 該当のプログラムはこんな感じです。 ~~~~~~ $twitter = new tmhOAuth( array("consumer_key"=>"****","consumer_secret"=>"****")); $here = tmhUtilities::php_self(); session_start(); if(isset($_REQUEST["command"]))switch($_REQUEST["command"]){ case "authorize"; //OAuth認可,まずリクエストトークンを取得 $twitter->request("POST",$twitter->url("oauth/request_token",""), array("oauth_callback" => $here."?command=callback")); //リクエストトークンはコールバックを受けてアクセストークンする際に必要なのでセッションに格納 $_SESSION["request_token"] = $twitter->extract_params($twitter->response["response"]); //twitterの認証画面へリダイレクト header("Location:".$twitter->url("oauth/authorize","")."?oauth_token={$_SESSION['request_token']['oauth_token']}"); break; ~~~~~~

    • 締切済み
    • 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
  • javaでTwitterのOAuth認証を用いたつぶやきのポストを実現

    javaでTwitterのOAuth認証を用いたつぶやきのポストを実現したいと考えています。アクセストークンとアクセストークンシークレットは取得できたのですがそれを用いてつぶやきをポストすることができません。OAuthのライブラリを使えばポストすることは出来たのですができればライブラリを使わずに実現したいと思っています。おそらくポストのやりかたがおかしいと思うのですが何が悪いのかわかりません。javaはあまり得意ではないためお見せするのも恥ずかしいソースですがおかしなところを指摘していただけるとありがたいです。ポストの部分を載せます。 String url="http://twitter.com/statuses/update.xml"; URL urlObj=new URL(url); HttpURLConnecton urlCon=(HttpURLConnection)urlObj.openConnection();urlCon.setRequestMethod("POST"); urlCon.setDoOutput(true); urlCon.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); urlCon.setRequestProperty("Authorization",header); //変数headerには以下のような文字列が入っています //OAuth oauth_nonce="****", oauth_signature_method="HMAC-SHA1", oauth_timestamp="****", oauth_consumer_key="****", oauth_token="****", oauth_signature="****", oauth_version="1.0" String body="status=test"; PrintWriter pw=new PrintWriter(urlCon.getOutputStream()); pw.print(body); pw.flush(); pw.close(); //ここでエラー BufferedReader inStr=new BufferedReader(new InputStreamReader(urlCon.getInputStream()));

    • ベストアンサー
    • Java
  • 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をつかったクライアントアプリを作ろうとしています。 ここのサイトを参考に作成中です。 http://www.ipentec.com/document/document.aspx?page=csharp-use-twitter-api-oauth-winform 投稿(stuses/update)は処理できるのですが、ツイートの取得(statuses/show)でエラーになってしまいます。 private void bttnEntryPinCode_Click(object sender, EventArgs e) { OAuth.oAuthTwitter o = new OAuth.oAuthTwitter(); o.ConsumerKey = Properties.Settings.Default.ConsumerKey; o.ConsumerSecret = Properties.Settings.Default.ConsumerSecret; o.Token = Properties.Settings.Default.AccessToken; o.TokenSecret = Properties.Settings.Default.AccessTokenSecret; string postURL = ""; string postData = ""; postURL = API + "statuses/update.xml"; postData = "status=" +"ただいまの時間" + DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString(); Console.WriteLine(o.oAuthWebRequest(OAuth.oAuthTwitter.Method.POST, postURL, postData)); //↑正常に処理 postURL = API + "statuses/show.xml"; postData = "id=13322284000"; Console.WriteLine(o.oAuthWebRequest(OAuth.oAuthTwitter.Method.GET, postURL, postData)); //404エラー } しかし、エラーになるURLをブラウザから直接入力すると正常に表示されます。 http://api.twitter.com/1/statuses/show.xml?id=13322284000 これ以外にも users/show.xml でも同様なエラーが出てしまいます。 なぜURLをブラウザにいれるとOKで、プログラムから呼ぶとエラーになるのか、 その原因がずっとわからずにいます。 原因をご存じでしたら、教えてください。 この部分で完全に止まってしまっています。

  • 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
  • TwitterAPI OAuthでログインした後、ログインしたユーザー

    TwitterAPI OAuthでログインした後、ログインしたユーザー名を知るには? VC#2008でOAuthログイン後に投稿やフォローなどの処理が正常にできています。 ただ、【ログインした本人】のIDやスクリーン名をどう取得して良いのかわかりません。 users/show で詳細情報がわかりますが、idもscreen_nameも判らないので、調べられません。 IDとパスワードをクライアントアプリで使わないOAuthだから…。 とも思っていたのですが、WEB上のサービスではOAuthでログイン後に自分の情報が表示されているものもあります。 ということは調べられるはずなのですが、方法が判らずに悩んでいます。 OAuthログイン状態で、ログイン本人の情報を知る方法を教えてください。

  • PHPでTwitter APIを使いたい

    環境(windows,PHP,xampp) 行き詰っているところはcomposerの使い方です。composerをインストールしたのは良いのですが、そこから何をしていいのかわかりません。 ディレクトリとしては(C)/xampp/htdocs/php/twitter/index.php という感じです。twitterファイルのindex.phpにはtwitterから発行されたアクセストークンなどが入っています。 composerを使いtwitteroauthを導入したいのですが、他サイトなどを 見てcomposer.jsonファイルなるもを作ったのは良いのですが、どこに置いたらいいのかもわかりません。そしてどこにcomposer installを 書けばいいのでしょうか? 分かる方がいればお教えください。

    • ベストアンサー
    • PHP