• ベストアンサー
  • 困ってます

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で、プログラムから呼ぶとエラーになるのか、 その原因がずっとわからずにいます。 原因をご存じでしたら、教えてください。 この部分で完全に止まってしまっています。

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

  • 回答数2
  • 閲覧数416
  • ありがとう数11

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

  • ベストアンサー
  • 回答No.2
  • taloo
  • ベストアンサー率44% (1016/2281)

URLの生成がうまくいってないのでは? 自分で作ってみるとか。 postURL = API + "statuses/show.xml?id=13322284000"; postData = "";

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

質問者からのお礼

コチラも何でも確認しましたが問題有りません。 http://api.twitter.com/1/statuses/show.xml?id=13322284000 と実際に発行されるURLの違いとしては、oAuthでの認証のために トークンなどの情報が付加されています。 トークンだけにここに書けませんが、他の命令では正常に動作しています。 いろいろ試してoAuth経由で処理した場合、レスポンスの内容が異なっていることがあります。 通常のGET処理した場合とoAuth経由でGet処理した場合でツイッター側の処理が異なるのが原因ではないかと考えています。 ただそのような“レスポンスが異なる”と言う情報が見つからず、何かを間違っているのか?と悩んでいるところです。

質問者からの補足

原因が判明しました。 TiwtterAPIの処理のなかでGETと投げるときに、引用の部分をアルファベット順に並び替える必要がありました。 POSTではその影響を受けなかったのですが、GETではOAuth関連項目が増えるので問題が出ていたようです。 お騒がせしました。

その他の回答 (1)

  • 回答No.1
  • notnot
  • ベストアンサー率47% (4694/9882)

>Console.WriteLine(o.oAuthWebRequest(OAuth.oAuthTwitter.Method.GET, postURL, postData)); GETで、POSTしようとしているからでは?

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

質問者からのお礼

この部分の間違いはないようです。 GETの場合は404エラー(NotFound)ですが、POSTにすると400エラー(BadRequest)になりました。 ツイッターAPIのレスポンスはHTTPステータスコードとなっていて、404の場合「該当するデータがない」ということになります。 でも、質問の通り、URLにするとちゃんと返事が返ってくるので、原因がわかりません。

関連するQ&A

  • 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
  • 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
  • PHPでtwitterAPI利用時のサーバー設定

    TwitterAPI(ver1.1)を利用して自分のつぶやきをPHPで取得したいと思います。 認証は「OAuth.php」「twitteroauth.php」の外部ライブラリを利用しています。 下記のファイル構成でレンタルサーバーで試したところ、つぶやきのデータが取得できました。 しかし自分で構築したVPSのサーバーで実行しようとしたところ、処理に長く時間がかかり、「取得できません」という表示になってしまいます。 「OAuth」「twitteroauth」を使うにあたり、サーバーで設定すべき項目はあるのでしょうか? また、下記のプログラムで変数 $twObj にはAPIキーなどが配列で入られているのはわかったのですが、 $req 以降の変数はvar_dumpをしても何も表示されません。 TwitterAPIからどのようなメッセージが返ってきているかを表示させるには、どのようなプログラムを書けばよいのでしょうか? 以上、ご回答よろしくお願いいたします。 環境 ----------------------------- PHP 5.3.3 apach 2.2.3 CentOS 5.4(VPSで構築したLinuxサーバー) ----------------------------- ファイル構成 OAuth.php twitteroauth.php tweet.php を同じディレクトリに配置。 tweet.php ------------------------------------------------------------------------------ require_once 'twitteroauth.php'; $twObj = new TwitterOAuth($ConsumerKey,$ConsumerSecret,$AccessToken,$AccessTokenSecret); //APIのキーは取得したものを代入しています。(記載は省略) $req = $twObj->OAuthRequest('https://api.twitter.com/1.1/statuses/user_timeline.json','GET',array('count'=>'10')); $tweets = json_decode($req); if (isset($tweets) && empty($tweets->errors)) { echo '<dl>'; foreach ($tweets as $val) { echo '<dd>' . $val->text . ''; } echo '</dd></dl>'; } else { echo '取得できません。'; } -----------------------------------------------------------------------

    • ベストアンサー
    • PHP
  • twitterAPIについて

    twitterAPIについて です。 今Visual Studio 2008でC#.NETでtwitterのタイムラインを読み込んでみようと思っています。 xmlを読み込むまではできましたが、 そのxmlを抽出する方法が全く分かりません。 このさきどうすればいいのでしょうか? ユーザー1:ツイート ユーザー2:ツイート といった感じにTextBoxに並べるのが目標です。 文字列をxmlに変換する方法があるのでしょうか? 一応ソースコードを載せて起きます。(using部分、例外処理などは除く) private void XmlLoad() { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://twitter.com/statuses/home_timeline.xml"); request.Credentials = new NetworkCredential(IDtext.Text, passText.Text); request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; request.Timeout = 10000; System.Net.ServicePointManager.Expect100Continue = false; WebResponse response = request.GetResponse(); Encoding enc = Encoding.GetEncoding(932); StreamReader reader = new StreamReader(response.GetResponseStream(), enc); string result = reader.ReadToEnd(); result = System.Web.HttpUtility.HtmlDecode(result); resultText.Text = result; reader.Close(); response.Close(); } private void OK_Click(object sender, EventArgs e) { XmlLoad(); } オブジェクト(TextBoxなど)は、 IDText(TextBox) passText(TextBox) OK(Button) resultText(TextBox) です! わかる方お願いします。 質問があれば答えます。

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

  • TwitterAPI OAuthでログインした後、ログインしたユーザー

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

  • 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
  • twitterAPIを利用してツイート一覧を取得

    <?php //twitteroauth.phpを読み込み require_once dirname(__FILE__) .'/twitteroauth.php'; //検索ワード配列 $keyword_list = array("OKWave","yahoo知恵袋"); //最大検索数 $countmax = 10; //twitterAppsで取得 $consumerKey = '*****'; $consumerSecret = '*****'; $accessToken = '*****'; $accessTokenSecret = '*****'; $to = new TwitterOAuth( $consumerKey, $consumerSecret, $accessToken, $accessTokenSecret ); //Twitterで検索するワード //複数の場合はORかANDを使う $key = ""; $size = count($keyword_list); for($i=0;$i<$size;$i++){ $keyword = $keyword_list[$i]; $key .= $keyword; if($i<$size-1){ $key .= " AND "; } } //オプション設定 //countmaxは最大検索数 $options = array('q'=>$key,'count'=>$countmax,'lang'=>'ja'); //検索 $json = $to->OAuthRequest( 'https://api.twitter.com/1.1/search/tweets.json', 'GET', $options ); $jset = json_decode($json, true); //tweetidを取得 foreach ($jset['statuses'] as $result) { //ローマ字の名前 $screen_name = $result['user']['screen_name']; //ユーザーID(数字) $id = $result['user']['id']; //ユーザー名 $name = $result['user']['name']; //ユーザーアイコン画像URL $link = $result['user']['profile_image_url']; //該当ツイート $content = $result['text']; //更新日 $updated = $result['created_at']; $time = date("Y-m-d H:i:s",strtotime($updated)); //不明なものはprint_rで見ればいい //print_r($result); echo "<img src='".$link."''>"." | ".$screen_name." | ".$id." | ".$name." | ".$content." | ".$time." "; } ?> このコードで特定のワードを含んだツイートを取得して【並び替えてから】表示したいのですが、並び替えがうまくできません。 ランダムや新着順、リツイート順などで並び替えることは可能でしょうか。 可能であれば、並び替えの為に必要なコードを教えていただけませんか。

    • ベストアンサー
    • PHP
  • pythonでtwitterAPIを使用としたときのGAE上でのエラー

    pythonでtwitterAPIを使用としたときのGAE上でのエラー <class 'urllib2.HTTPError'>: HTTP Error 401: Unauthorized GAE上にこの様なエラーが出てしまい。twitterbotに反映されません。 import urllib2は行っているのですが原因が分からず困っています。 よろしくお願いします # -*- coding: utf-8 -*- import twitter import random import os # from tenki import information from google.appengine.api import users from google.appengine.ext import webapp from google.appengine.ext.webapp import util from google.appengine.ext.webapp import template # twitter.Api.__init__ method for override. def twitter_api_init_gae(self, username=None, password=None, input_encoding=None, request_headers=None): import urllib2 from twitter import Api self._cache = None self._urllib = urllib2 self._cache_timeout = Api.DEFAULT_CACHE_TIMEOUT self._InitializeRequestHeaders(request_headers) self._InitializeUserAgent() self._InitializeDefaultParameters() self._input_encoding = input_encoding self.SetCredentials(username, password) # 天気用に追加 # from urllib2 import urlopen # from xml.dom.minidom import parseString # from xml.etree.ElementTree import * # information = [] # io = urlopen("http://www.google.com/ig/api?weather=Tokyo") # dom = ElementTree(file=io) # cond = dom.find("//current_conditions") # for name in ["condition","temp_c","humidity","wind_condition"]: # information.append(cond.find(name).get("data")) # overriding API __init__ twitter.Api.__init__ = twitter_api_init_gae list = [ u"ante" ,u"Do my best" ,u"piyopiyopiyo" ,u"piyopiyo" ,u"ponyo" ,u"piyo" ,u"my name is anteroom" # ,u"Today's weather is " + information[0] # ,u"Today's weather is " + information[1] # ,u"Today's weather is " + information[2] # ,u"Today's weather is " + information[3] ] post = random.choice(list) api = twitter.Api("hoge","hoge") api.PostUpdate(post)

  • TwitterのOauth認証プログラムについて

    TwitterのOauth認証プログラムについて 現在、Oauth認証を使って、一般ユーザが認証確認後、 WEBから投稿できるシステムを作ろうとしています。 Oauth_TokenとOauth_Token_Secretは、 $tok = $to->getRequestToken(); で取得されたものを変数として保持して取得しようとしているのですが、 この2つの認証コードと、固有の consumer_keyとconsumer_secretを使用して 認証させ、投稿プログラム $req = $to->OAuthRequest("https://twitter.com/statuses/update.xml","POST",array("status"=> $tweet . " " . $url . " #" . $hash)); を実行させると、なぜか <?xml version="1.0" encoding="UTF-8" ?> - <hash> <request>/statuses/update.xml</request> <error>Could not authenticate you.</error> </hash> つまり、認証されてない状態になってしまいます。 Oauth_TokenとOauth_Token_Secretを取得している場所が間違っているのでしょうか? もしかしてこの2つのコードが逆だったのかもしれないと思い、 逆にして投稿してみたのですが、それでも同じエラー画面に飛んでしまいます。 なぜだか分かる方、いらっしゃいますか?

    • ベストアンサー
    • PHP