2013年9月29日日曜日

Twitter Errors

[errors] => sharing is not permissible for this status (Share validations failed)




stdClass Object
(
    [errors] => Array
        (
            [0] => stdClass Object
                (
                    [code] => 195
                    [message] => Missing or invalid url parameter.
                )

        )

)




stdClass Object
(
    [errors] => Array
        (
            [0] => stdClass Object
                (
                    [message] => Bad Authentication data
                    [code] => 215
                )

        )

)




stdClass Object
(
    [errors] => Array
        (
            [0] => stdClass Object
                (
                    [code] => 25
                    [message] => Query parameters are missing.
                )

        )

)

stdClass Object
(
    [errors] => Array
        (
            [0] => stdClass Object
                (
                    [code] => 158
                    [message] => You can't follow yourself
                )

        )

)
stdClass Object
(
    [errors] => Array
        (
            [0] => stdClass Object
                (
                    [message] => Sorry, that page does not exist
                    [code] => 34
                )

        )

)
stdClass Object
(
    [errors] => Array
        (
            [0] => stdClass Object
                (
                    [message] => Rate limit exceeded
                    [code] => 88
                )

        )

)

POST statuses/destroy/:id

<?php
include_once('../oauth/start.php');
/*
Twitter
POST statuses/destroy/:id
https://dev.twitter.com/docs/api/1.1/post/statuses/destroy/%3Aid
https://api.twitter.com/1.1/statuses/destroy/:id.json
HTTP Methods POST

 */

echo '<pre>';
$apiurl='https://api.twitter.com/1.1/statuses/destroy/382527698498621440.json';
$HTTP_Methods='POST';
$paras['id']='';
$paras['trim_user']='true';


$x->twoauth($HTTP_Methods,$apiurl,$paras);
//$x->send_curl();
//var_dump($x->send_curl());
print_r($x->send_curl());

?>



stdClass Object
(
    [geo] => 
    [entities] => stdClass Object
        (
            [urls] => Array
                (
                )

            [hashtags] => Array
                (
                )

            [user_mentions] => Array
                (
                )

        )

    [user] => stdClass Object
        (
            [id] => 371259452
            [id_str] => 371259452
        )

    [in_reply_to_user_id] => 
    [contributors] => 
    [place] => 
    [retweet_count] => 0
    [source] => ツイッターの種
    [in_reply_to_status_id_str] => 
    [coordinates] => 
    [retweeted] => 
    [id] => 3.82527698499E+17
    [in_reply_to_user_id_str] => 
    [in_reply_to_status_id] => 
    [truncated] => 
    [in_reply_to_screen_name] => 
    [created_at] => Tue Sep 24 15:31:25 +0000 2013
    [id_str] => 382527698498621440
    [text] => 福島県漁連 試験操業を再開へ
    [favorited] => 
)

GET statuses/retweets/:id

$apiurl='https://api.twitter.com/1.1/statuses/retweets/373439054957670401.json';
$HTTP_Methods='GET';
$paras['id']=''; //id.json
$paras['count']='1';
$paras['trim_user']='true';


$x->twoauth($HTTP_Methods,$apiurl,$paras);
//$x->send_curl();
//var_dump($x->send_curl());
print_r($x->send_curl());



Array
(
    [0] => stdClass Object
        (
            [created_at] => Sun Sep 29 01:37:32 +0000 2013
            [id] => 3.84129784651E+17
            [id_str] => 384129784650801152
            [text] => RT @masason: 被災地高校生の留学支援「TOMODACHIリーダーシップ・プログラム」に参加した100人が無事帰国。米国での学びと被災地の現状を9/1(日)13:30~アップルストア銀座にて報告します。ぜひ高校生の生の声を聞きに来て下さい。
            [source] => Twitter for iPhone
            [truncated] => 
            [in_reply_to_status_id] => 
            [in_reply_to_status_id_str] => 
            [in_reply_to_user_id] => 
            [in_reply_to_user_id_str] => 
            [in_reply_to_screen_name] => 
            [user] => stdClass Object
                (
                    [id] => 118879992
                    [id_str] => 118879992
                )

            [geo] => 
            [coordinates] => 
            [place] => 
            [contributors] => 
            [retweeted_status] => stdClass Object
                (
                    [created_at] => Fri Aug 30 13:36:23 +0000 2013
                    [id] => 3.73439054958E+17
                    [id_str] => 373439054957670401
                    [text] => 被災地高校生の留学支援「TOMODACHIリーダーシップ・プログラム」に参加した100人が無事帰国。米国での学びと被災地の現状を9/1(日)13:30~アップルストア銀座にて報告します。ぜひ高校生の生の声を聞きに来て下さい。
                    [source] => TwitRocker2 for iPad
                    [truncated] => 
                    [in_reply_to_status_id] => 
                    [in_reply_to_status_id_str] => 
                    [in_reply_to_user_id] => 
                    [in_reply_to_user_id_str] => 
                    [in_reply_to_screen_name] => 
                    [user] => stdClass Object
                        (
                            [id] => 99008565
                            [id_str] => 99008565
                        )

                    [geo] => 
                    [coordinates] => 
                    [place] => 
                    [contributors] => 
                    [retweet_count] => 247
                    [favorite_count] => 104
                    [entities] => stdClass Object
                        (
                            [hashtags] => Array
                                (
                                )

                            [symbols] => Array
                                (
                                )

                            [urls] => Array
                                (
                                )

                            [user_mentions] => Array
                                (
                                )

                        )

                    [favorited] => 
                    [retweeted] => 
                    [lang] => ja
                )

            [retweet_count] => 247
            [favorite_count] => 0
            [entities] => stdClass Object
                (
                    [hashtags] => Array
                        (
                        )

                    [symbols] => Array
                        (
                        )

                    [urls] => Array
                        (
                        )

                    [user_mentions] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [screen_name] => masason
                                    [name] => 孫正義
                                    [id] => 99008565
                                    [id_str] => 99008565
                                    [indices] => Array
                                        (
                                            [0] => 3
                                            [1] => 11
                                        )

                                )

                        )

                )

            [favorited] => 
            [retweeted] => 
            [lang] => ja
        )

)

Twitter API optional trim_user

$apiurl='https://api.twitter.com/1.1/statuses/user_timeline.json';
$HTTP_Methods='GET';
$paras['user_id']='';
$paras['screen_name']='';
$paras['since_id']='382527698498621440';
$paras['count']='';
$paras['page']='';
$paras['max_id']='383209620551921666';
$paras['trim_user']='true';
$paras['include_entities']='true';
$paras['exclude_replies']='true';
$paras['contributor_details']='true';
$paras['include_rts']='true';

$x->twoauth($HTTP_Methods,$apiurl,$paras);
//$x->send_curl();
//var_dump($x->send_curl());
print_r($x->send_curl());


例  trim_user = true
Array
(
    [0] => stdClass Object
        (
            [created_at] => Thu Sep 26 12:41:07 +0000 2013
            [id] => 3.83209620552E+17
            [id_str] => 383209620551921666
            [text] => 楽天Vなるか、9回マー君登場
            [source] => ツイッターの種
            [truncated] => 
            [in_reply_to_status_id] => 
            [in_reply_to_status_id_str] => 
            [in_reply_to_user_id] => 
            [in_reply_to_user_id_str] => 
            [in_reply_to_screen_name] => 
            [user] => stdClass Object
                (
                    [id] => 371259452
                    [id_str] => 371259452
                )

            [geo] => 
            [coordinates] => 
            [place] => 
            [contributors] => 
            [retweet_count] => 0
            [favorite_count] => 0
            [entities] => stdClass Object
                (
                    [hashtags] => Array
                        (
                        )

                    [symbols] => Array
                        (
                        )

                    [urls] => Array
                        (
                        )

                    [user_mentions] => Array
                        (
                        )

                )

            [favorited] => 
            [retweeted] => 
            [lang] => ja
        )

)

例  trim_user = false

Array
(
    [0] => stdClass Object
        (
            [created_at] => Thu Sep 26 12:41:07 +0000 2013
            [id] => 3.83209620552E+17
            [id_str] => 383209620551921666
            [text] => 楽天Vなるか、9回マー君登場
            [source] => ツイッターの種
            [truncated] => 
            [in_reply_to_status_id] => 
            [in_reply_to_status_id_str] => 
            [in_reply_to_user_id] => 
            [in_reply_to_user_id_str] => 
            [in_reply_to_screen_name] => 
            [user] => stdClass Object
                (
                    [id] => 371259452
                    [id_str] => 371259452
                    [name] => 黒(hei)
                    [screen_name] => hei6321
                    [location] => 日本
                    [description] => 始めまして、黒です。これからもTwitterで一緒にYahooApiを遊ぼう!!!. http://t.co/GbOnNHxhTg
                    [url] => http://t.co/fw9Qmf2t3W
                    [entities] => stdClass Object
                        (
                            [url] => stdClass Object
                                (
                                    [urls] => Array
                                        (
                                            [0] => stdClass Object
                                                (
                                                    [url] => http://t.co/fw9Qmf2t3W
                                                    [expanded_url] => http://apiyahoo.hp2.jp/
                                                    [display_url] => apiyahoo.hp2.jp
                                                    [indices] => Array
                                                        (
                                                            [0] => 0
                                                            [1] => 22
                                                        )

                                                )

                                        )

                                )

                            [description] => stdClass Object
                                (
                                    [urls] => Array
                                        (
                                            [0] => stdClass Object
                                                (
                                                    [url] => http://t.co/GbOnNHxhTg
                                                    [expanded_url] => http://loto6.pa.land.to/
                                                    [display_url] => loto6.pa.land.to
                                                    [indices] => Array
                                                        (
                                                            [0] => 43
                                                            [1] => 65
                                                        )

                                                )

                                        )

                                )

                        )

                    [protected] => 
                    [followers_count] => 1677
                    [friends_count] => 1825
                    [listed_count] => 0
                    [created_at] => Sat Sep 10 14:13:36 +0000 2011
                    [favourites_count] => 22
                    [utc_offset] => 32400
                    [time_zone] => Tokyo
                    [geo_enabled] => 1
                    [verified] => 
                    [statuses_count] => 2569
                    [lang] => ja
                    [contributors_enabled] => 
                    [is_translator] => 
                    [profile_background_color] => C0DEED
                    [profile_background_image_url] => http://abs.twimg.com/images/themes/theme1/bg.png
                    [profile_background_image_url_https] => https://abs.twimg.com/images/themes/theme1/bg.png
                    [profile_background_tile] => 
                    [profile_image_url] => http://a0.twimg.com/profile_images/3175354807/63967ddad879ead7bae40d178cf1ebb2_normal.png
                    [profile_image_url_https] => https://si0.twimg.com/profile_images/3175354807/63967ddad879ead7bae40d178cf1ebb2_normal.png
                    [profile_banner_url] => https://pbs.twimg.com/profile_banners/371259452/1357434745
                    [profile_link_color] => 0084B4
                    [profile_sidebar_border_color] => C0DEED
                    [profile_sidebar_fill_color] => DDEEF6
                    [profile_text_color] => 333333
                    [profile_use_background_image] => 1
                    [default_profile] => 1
                    [default_profile_image] => 
                    [following] => 
                    [follow_request_sent] => 
                    [notifications] => 
                )

            [geo] => 
            [coordinates] => 
            [place] => 
            [contributors] => 
            [retweet_count] => 0
            [favorite_count] => 0
            [entities] => stdClass Object
                (
                    [hashtags] => Array
                        (
                        )

                    [symbols] => Array
                        (
                        )

                    [urls] => Array
                        (
                        )

                    [user_mentions] => Array
                        (
                        )

                )

            [favorited] => 
            [retweeted] => 
            [lang] => ja
        )

)

Twitter API optional since_id max_id

Twitter API optional


*
*
*
*
*
*  since_id     より↑のツイートを表示
*  max_id      より↓のツイートを表示
*
*
*
*
*
*
*
*

GET statuses/user_timeline

<?php
include_once('../oauth/start.php');
/*
Timelines
GET statuses/user_timeline
https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline
HTTP Methods GET

認証ユーザーのステータス情報(各つぶやきとそれに関連する諸々の情報)の最大3200件分から最新20件
(count引数指定で最大200件)を取得します。 screen_name や user_id のパラメータを指定すれば
他のユーザーのステータス情報を取得できます。ただしそのユーザー情報が非表示設定されていない場合か、
認証ユーザーからのフォローリクエストを承諾している場合に限ります。返されたタイムラインは、Twitter.com
にログインするときにユーザー自身が見るのと同じタイムライン情報です。このメソッドは、最大3200件まで
ステータス情報を返します。include_rts が true または 1 になっていれば、リツイートも含めて最大
3200件のステータス情報を返します。

このメソッドは、include_rtsパラメータが設定されていない限り、XMLとJSON形式において、リツイートの
つぶやきは含まれません。RSSとAtom形式の場合は、常にステータス情報にリツイートが含まれます。

http://www.tryphp.net/2012/01/10/phpapptwitter-user_timeline/
http://twinavi.jp/guide/section/twitter/glossary/メンション(Mentions)とは

 */

echo '<pre>';
$apiurl='https://api.twitter.com/1.1/statuses/user_timeline.json';
$HTTP_Methods='GET';
$paras['user_id']='';
$paras['screen_name']='masason';
$paras['since_id']='371636752991010817';
$paras['count']='';
$paras['page']='';
$paras['max_id']='';
$paras['trim_user']='true';
$paras['include_entities']='true';
$paras['exclude_replies']='';
$paras['contributor_details']='';
$paras['include_rts']='';

$x->twoauth($HTTP_Methods,$apiurl,$paras);
//$x->send_curl();
//var_dump($x->send_curl());
print_r($x->send_curl());

?>





Array
(
    [0] => stdClass Object
        (
            [created_at] => Fri Aug 30 13:36:23 +0000 2013
            [id] => 3.73439054958E+17
            [id_str] => 373439054957670401
            [text] => 被災地高校生の留学支援「TOMODACHIリーダーシップ・プログラム」に参加した100人が無事帰国。米国での学びと被災地の現状を9/1(日)13:30~アップルストア銀座にて報告します。ぜひ高校生の生の声を聞きに来て下さい。
            [source] => TwitRocker2 for iPad
            [truncated] => 
            [in_reply_to_status_id] => 
            [in_reply_to_status_id_str] => 
            [in_reply_to_user_id] => 
            [in_reply_to_user_id_str] => 
            [in_reply_to_screen_name] => 
            [user] => stdClass Object
                (
                    [id] => 99008565
                    [id_str] => 99008565
                )

            [geo] => 
            [coordinates] => 
            [place] => 
            [contributors] => 
            [retweet_count] => 247
            [favorite_count] => 104
            [entities] => stdClass Object
                (
                    [hashtags] => Array
                        (
                        )

                    [symbols] => Array
                        (
                        )

                    [urls] => Array
                        (
                        )

                    [user_mentions] => Array
                        (
                        )

                )

            [favorited] => 
            [retweeted] => 
            [lang] => ja
        )

)

GET statuses/mentions_timeline

GET statuses/mentions_timeline

<?php
include_once('../oauth/start.php');
/*
Timelines
GET statuses/mentions_timeline
https://api.twitter.com/1.1/statuses/mentions_timeline.json
HTTP Methods GET

認証ユーザーへのつぶやきを示す@ユーザー名を含むステータス情報(各つぶやきとそれに関連する諸々の情報)の最新20件
(count引数指定で最大200件)を返します。返されたタイムラインは、Twitter.com 上の mentions(@関連) の表示と
同じです。誰かが投稿した、自分へに対するつぶやき「@自分」を含む「メンションつぶやき」一覧を取得します。mentions(@関連)
 の一覧と同じです。

このメソッドは最大800件までステータス情報を返します。include_rts が true または 1 になっていれば、リツイートも含めて
最大800件のステータス情報を返します。

このメソッドは、include_rtsパラメータが設定されていない限り、XMLとJSON形式において、リツイートのつぶやきは含まれません。
RSSとAtom形式の場合は、常にステータス情報にリツイートが含まれます。

http://www.tryphp.net/2012/01/05/phpapptwitter-mentions/
http://twinavi.jp/guide/section/twitter/glossary/メンション(Mentions)とは

 */

echo '<pre>';
$apiurl='https://api.twitter.com/1.1/statuses/mentions_timeline.json';
$HTTP_Methods='GET';
$paras['count']='5'; //取得結果数
$paras['page']='5'; //取得ページ数
$paras['since_id']='';
$paras['max_id']='';
$paras['trim_user']='true'; //ユーザー情報含まない
$paras['contributor_details']='';
$paras['include_entities']='false'; //実体含まない
$x->twoauth($HTTP_Methods,$apiurl,$paras);
//$x->send_curl();
print_r($x->send_curl());

?>





Array
(
    [0] => stdClass Object
        (
            [created_at] => Mon Aug 05 22:46:55 +0000 2013
            [id] => 3.64517905771E+17
            [id_str] => 364517905771139072
            [text] => @hei6321 雨?
            [source] => Tweetbot for iOS
            [truncated] => 
            [in_reply_to_status_id] => 3.6451560366E+17
            [in_reply_to_status_id_str] => 364515603660292096
            [in_reply_to_user_id] => 371259452
            [in_reply_to_user_id_str] => 371259452
            [in_reply_to_screen_name] => hei6321
            [user] => stdClass Object
                (
                    [id] => 44096288
                    [id_str] => 44096288
                )

            [geo] => 
            [coordinates] => 
            [place] => 
            [contributors] => 
            [retweet_count] => 0
            [favorite_count] => 0
            [favorited] => 
            [retweeted] => 
            [lang] => ja
        )

    [1] => stdClass Object
        (
            [created_at] => Fri Aug 02 11:14:38 +0000 2013
            [id] => 3.63256521582E+17
            [id_str] => 363256521582313472
            [text] => 2回目以降はほんま面倒ですよ。 RT @hei6321
            [source] => web
            [truncated] => 
            [in_reply_to_status_id] => 3.632558533E+17
            [in_reply_to_status_id_str] => 363255853299666946
            [in_reply_to_user_id] => 371259452
            [in_reply_to_user_id_str] => 371259452
            [in_reply_to_screen_name] => hei6321
            [user] => stdClass Object
                (
                    [id] => 248336266
                    [id_str] => 248336266
                )

            [geo] => 
            [coordinates] => 
            [place] => 
            [contributors] => 
            [retweet_count] => 1
            [favorite_count] => 0
            [favorited] => 
            [retweeted] => 
            [lang] => ja
        )

    [2] => stdClass Object
        (
            [created_at] => Fri Aug 02 11:11:11 +0000 2013
            [id] => 3.63255655404E+17
            [id_str] => 363255655404023809
            [text] => @hei6321 それは確かに!
            [source] => Tweetbot for iOS
            [truncated] => 
            [in_reply_to_status_id] => 3.63253881893E+17
            [in_reply_to_status_id_str] => 363253881892909057
            [in_reply_to_user_id] => 371259452
            [in_reply_to_user_id_str] => 371259452
            [in_reply_to_screen_name] => hei6321
            [user] => stdClass Object
                (
                    [id] => 44096288
                    [id_str] => 44096288
                )

            [geo] => 
            [coordinates] => 
            [place] => 
            [contributors] => 
            [retweet_count] => 0
            [favorite_count] => 0
            [favorited] => 
            [retweeted] => 
            [lang] => ja
        )

    [3] => stdClass Object
        (
            [created_at] => Thu Jul 25 23:30:44 +0000 2013
            [id] => 3.60542665488E+17
            [id_str] => 360542665487560704
            [text] => @hei6321 あらっ、早起きw
            [source] => Tweetbot for iOS
            [truncated] => 
            [in_reply_to_status_id] => 3.60538782816E+17
            [in_reply_to_status_id_str] => 360538782816161792
            [in_reply_to_user_id] => 371259452
            [in_reply_to_user_id_str] => 371259452
            [in_reply_to_screen_name] => hei6321
            [user] => stdClass Object
                (
                    [id] => 44096288
                    [id_str] => 44096288
                )

            [geo] => 
            [coordinates] => 
            [place] => 
            [contributors] => 
            [retweet_count] => 0
            [favorite_count] => 0
            [favorited] => 
            [retweeted] => 
            [lang] => ja
        )

    [4] => stdClass Object
        (
            [created_at] => Wed Jul 24 11:50:42 +0000 2013
            [id] => 3.60004108067E+17
            [id_str] => 360004108066885634
            [text] => @hei6321 今日も一日お疲れ様!
            [source] => Tweetbot for iOS
            [truncated] => 
            [in_reply_to_status_id] => 3.60001300312E+17
            [in_reply_to_status_id_str] => 360001300311719936
            [in_reply_to_user_id] => 371259452
            [in_reply_to_user_id_str] => 371259452
            [in_reply_to_screen_name] => hei6321
            [user] => stdClass Object
                (
                    [id] => 44096288
                    [id_str] => 44096288
                )

            [geo] => 
            [coordinates] => 
            [place] => 
            [contributors] => 
            [retweet_count] => 0
            [favorite_count] => 0
            [favorited] => 
            [retweeted] => 
            [lang] => ja
        )

)

2013年9月23日月曜日

Twitter Oauth 認証の流れ

1.    POST oauth/request_token
      https://api.twitter.com/oauth/request_token



2.    GET oauth/authorize
      https://api.twitter.com/oauth/authorize



3.   POST oauth/access_token
     https://api.twitter.com/oauth/access_token



例   http://hpapi.blogspot.jp/2013/09/post-oauthrequesttoken.html
      POST oauth/request_token 成功
      

2013年9月21日土曜日

POST oauth/access_token

POST oauth/access_token 成功

<?php
//error_reporting(E_ALL);
date_default_timezone_set('Asia/Tokyo');
?>
<?php
//new newlogin(oauth_consumer_key, oauth_consumer_key_secret, Callback_URL);
$x=new newlogin('**********', '*************', 'http://www.dodofei.com/oauthget.php');
if(!array_key_exists('oauth_token',$_REQUEST) and !array_key_exists('oauth_verifier',$_REQUEST)){
$x->request_token();
}else{
$x->access_token("http://www.dodofei.com");
}

?>
<?php
class newlogin{

public $debug='off';
public $Request_token_URL='https://api.twitter.com/oauth/request_token';
public $Authorize_URL='https://api.twitter.com/oauth/authorize';
public $Access_token_URL='https://api.twitter.com/oauth/access_token';
public $oauth_signature_method= 'HMAC-SHA1';
public $oauth_version= '1.0';
public $oauth_para=array();
  public $oauth_consumer_key='';
public $oauth_consumer_key_secret= '';
public $oauth_token_secret= '';

public function newlogin($oauth_consumer_key, $oauth_consumer_key_secret, $Callback_URL){

$this->oauth_para['oauth_callback']=$Callback_URL;
$this->oauth_para['oauth_consumer_key']=$oauth_consumer_key;
$this->oauth_para['oauth_nonce']=md5(microtime().mt_rand());
$this->oauth_para['oauth_signature_method']=$this->oauth_signature_method;
$this->oauth_para['oauth_timestamp']=time();
$this->oauth_para['oauth_version']=$this->oauth_version;
$this->oauth_consumer_key_secret=$oauth_consumer_key_secret;
}

public function request_token(){
//request_token
$signature_key=rawurlencode($this->oauth_consumer_key_secret).'&';
$respons=$this->fun_curl($this->oauth_para, $signature_key, $this->Request_token_URL,'POST');
$requestToken = array();
foreach(explode('&',$respons) as $val){
$param = explode('=',$val);
$requestToken[$param[0]] = $param[1];
}
$this->oauth_token_secret=$requestToken['oauth_token_secret'];
header(sprintf('Location: %s?%s',$this->Authorize_URL,'oauth_token='.$requestToken['oauth_token']));
}

public function authorize(){
//authorize
header(sprintf('Location: %s?%s',$this->Authorize_URL,$respons));
}

public function access_token($hpurl){
//access_token
$signature_key=rawurlencode($this->oauth_consumer_key_secret).'&'.rawurlencode($this->oauth_token_secret);
$add_para=array();
$add_para['oauth_token']=$_GET['oauth_token'];
$add_para['oauth_verifier']=$_GET['oauth_verifier'];
$para=$this->oauth_para+$add_para;
$respons=$this->fun_curl($para, $signature_key, $this->Access_token_URL,'POST');

foreach (explode('&',$respons) as $val){
$param=explode('=',$val);
setcookie($param[0],$param[1],time()+60*60*24*30*30);
}

if($respons!='error'){
//header('Location: http://www.dodofei.com/index.php?'.$respons);
header('Location: '.$hpurl);
}
}



public function fun_curl($para, $signature_key, $url, $httptype){
//oauth_signature
ksort($para);
$temp=array();
foreach ($para as $key=>$val){
if(!empty($val)){
$temp[count($temp)]=$key.'='.rawurlencode($val);
}
}

$bas_sting=implode('&',$temp);
$signature_base_string=rawurlencode($httptype).'&'.rawurlencode($url).'&'.rawurlencode($bas_sting);

if($this->debug=='on'){
echo '<pre>';
echo __LINE__;
print_r($signature_base_string);
}

// NG $this->oauth_para['oauth_signature']=rawurlencode(base64_encode(hash_hmac('sha1',$this->signature_base_string,$this->signature_key,true)));
$para['oauth_signature']=base64_encode(hash_hmac('sha1', $signature_base_string, $signature_key, true));

if($this->debug=='on'){
echo '<pre>';
echo __LINE__;
print_r($temp);
}

//Authorization: OAuth
ksort($para);
$temp1=array();
$temp2=array();

foreach ($para as $key=>$val){
if(!empty($val)){
$temp1[count($temp1)]=$key.'="'.urlencode($val).'"';
if ($key!='oauth_callback'){
$temp2[count($temp2)]=$key.'='.urlencode(rawurldecode($val));
}
}
}

$Authorization_header='Authorization: OAuth '.implode(', ',$temp1);

if($this->debug=='on'){
echo '<pre><br>';
echo __LINE__;
print_r($temp1);
}

//GET利用しない
$request_curldata=implode('&',$temp2);
if($this->debug=='on'){
echo '<pre><br>';
echo __LINE__;
print_r($temp2);
}


//CURL 送信
$ch=curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($Authorization_header,'Content-Length:','Expect:','Content-Tpye:'));
//curl_setopt($ch, CURLOPT_HTTPHEADER, array($this->Authorization_header));

if($httptype=='GET'){
//GET動かない
$geturl=$url.'?'.$request_curldata;
curl_setopt($ch, CURLOPT_POSTFIELDS, $request_curldata);
curl_setopt($ch, CURLOPT_URL, $geturl);
curl_setopt($ch, CURLOPT_HTTPGET, true);
}

if($httptype=='POST'){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, $url);
}

$response_josn = curl_exec($ch);
$curlgetinfo=curl_getinfo($ch,CURLINFO_HEADER_OUT);
$curlgetinfo=curl_getinfo($ch);
curl_close($ch);


if($curlgetinfo['http_code']==200){
return $response_josn;
}else{
return 'error';
}
}

}


?>

2013年9月20日金曜日

GET oauth/authorize 成功

GET oauth/authorize 成功

<?php
error_reporting(E_ALL);
date_default_timezone_set('Asia/Tokyo');
?>
<?php

$x=new newlogin('***************','********************','http://www.********.com');
//http://www.********.com/?oauth_token=z4MV1x5JnEyaRaq5VbpylGoZETAX6XVv5USpZJ247N8&oauth_verifier=5eFa14MMF5DWi8LK3ZsOsyMkg7WinBGwxXNvrNUqKhE
//http://www.********.com/?denied=7ejbFPRb1oZ1Z08r8XQOauRdIeh4EkLWKH0xNFI

?>
<?php


class newlogin{

public $debug='off';
public $request_type='POST';
public $oauth_para=array();
public $Request_token_URL='https://api.twitter.com/oauth/request_token';
public $Authorize_URL='https://api.twitter.com/oauth/authorize';
public $Access_token_URL='https://api.twitter.com/oauth/access_token';
public $oauth_signature_method= 'HMAC-SHA1';
public $oauth_version= '1.0';

public $Authorization_header;
public $signature_base_string;
public $oauth_signature;
public $signature_key;
public $curlgetinfo;
public $response_josn;
public $request_curldata;


public function newlogin($oauth_consumer_key,$oauth_consumer_key_secret,$Callback_URL){

$this->oauth_para['oauth_callback']=$Callback_URL;
$this->oauth_para['oauth_consumer_key']=$oauth_consumer_key;
$this->oauth_para['oauth_nonce']=md5(microtime().mt_rand());
$this->oauth_para['oauth_signature_method']=$this->oauth_signature_method;
$this->oauth_para['oauth_timestamp']=time();
$this->oauth_para['oauth_version']=$this->oauth_version;
$this->oauth_para['oauth_signature']='';
$this->signature_key=rawurlencode($oauth_consumer_key_secret).'&';

$this->oauth_set();
$this->send_curl();
}

public function oauth_set(){
//oauth_signature
ksort($this->oauth_para);
$temp=array();
foreach ($this->oauth_para as $key=>$val){
if(!empty($val)){
$temp[count($temp)]=$key.'='.rawurlencode($val);
}
}

$bas_sting=implode('&',$temp);
$this->signature_base_string=rawurlencode($this->request_type).'&'.rawurlencode($this->Request_token_URL).'&'.rawurlencode($bas_sting);

if($this->debug=='on'){
echo '<pre>';
echo __LINE__;
print_r($this->signature_base_string);
}

// NG $this->oauth_para['oauth_signature']=rawurlencode(base64_encode(hash_hmac('sha1',$this->signature_base_string,$this->signature_key,true)));
$this->oauth_para['oauth_signature']=base64_encode(hash_hmac('sha1',$this->signature_base_string,$this->signature_key,true));
$this->oauth_signature=$this->oauth_para['oauth_signature'];

if($this->debug=='on'){
echo '<pre>';
echo __LINE__;
print_r($temp);
}

//Authorization: OAuth
ksort($this->oauth_para);
$temp1=array();
$temp2=array();

foreach ($this->oauth_para as $key=>$val){
if(!empty($val)){
$temp1[count($temp1)]=$key.'="'.urlencode($val).'"';
if ($key!='oauth_callback'){
$temp2[count($temp2)]=$key.'='.urlencode(rawurldecode($val));
}
}
}

$this->Authorization_header='Authorization: OAuth '.implode(', ',$temp1);

if($this->debug=='on'){
echo '<pre><br>';
echo __LINE__;
print_r($temp1);
}

//GET利用しない
$this->request_curldata=implode('&',$temp2);
if($this->debug=='on'){
echo '<pre><br>';
echo __LINE__;
print_r($temp2);
}

}

public function send_curl(){
//CURL 送信
$ch=curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,true);
//curl_setopt($ch, CURLOPT_HTTPHEADER, array($this->Authorization_header,'Content-Length:','Expect:','Content-Tpye:'));
curl_setopt($ch, CURLOPT_HTTPHEADER, array($this->Authorization_header));

if($this->request_type=='GET'){
//GET動かない
$geturl=$this->Request_token_URL.'?'.$this->request_curldata;
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->request_curldata);
curl_setopt($ch, CURLOPT_URL, $geturl);
curl_setopt($ch, CURLOPT_HTTPGET, true);
}

if($this->request_type=='POST'){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, $this->Request_token_URL);
}

$this->response_josn = curl_exec($ch);
$this->curlgetinfo=curl_getinfo($ch,CURLINFO_HEADER_OUT);
$this->curlgetinfo=curl_getinfo($ch);
curl_close($ch);

if($this->curlgetinfo['http_code']==200){
header(sprintf('Location: %s?%s',$this->Authorize_URL,$this->response_josn));
echo 'url Send';
}else{
sleep(3);
$this->oauth_set();
$this->send_curl();
echo 'url Error';
}
}



public function debug(){

//Debug
echo '<br>/////////Debut///////////////////';
echo '<br><pre>';
echo 'request_datas<br>';
//echo print_r($this->request_datas);
echo '<br><br>';
echo 'Signature base string<br>';
echo $this->signature_base_string;
echo '<br><br>';
echo 'oauth_signature<br>';
echo $this->oauth_signature;
echo '<br><br>';
echo 'Authorization header<br>';
echo $this->Authorization_header;
echo '<br><br>';
echo 'Curl data<br>';
echo $this->request_curldata;
echo '<br><br>';
echo 'Curl_getinfo<br>';
echo print_r($this->curlgetinfo);
echo '<br><br>';
echo 'JOSN data<br>';
echo print_r($this->response_josn);
echo '<br><br>';
echo '/////////Debut///////////////////';

}


}





?>

2013年9月19日木曜日

POST oauth/request_token 成功

POST oauth/request_token
成功、次はGET oauth/authorize


<?php
date_default_timezone_set('Asia/Tokyo');

error_reporting(E_ALL);

?>

<?php

$x=new newlogin();
$x->oauth_set();
$x->send_curl();
$x->debug();



class newlogin{

public $debug='off';
public $request_type='POST';
public $oauth_para=array();
  public $oauth_consumer_key= '***********************';
public $oauth_consumer_key_secret= '******************************';
public $oauth_token= '';
public $oauth_token_secret= '';
public $Request_token_URL='https://api.twitter.com/oauth/request_token';
public $Authorize_URL='https://api.twitter.com/oauth/authorize';
public $Access_token_URL='https://api.twitter.com/oauth/access_token';
public $Callback_URL='http://www.dodofei.com';
public $oauth_signature_method= 'HMAC-SHA1';
public $oauth_version= '1.0';


public $Authorization_header;
public $signature_base_string;
public $oauth_signature;
public $signature_key;
public $curlgetinfo;
public $response_josn;
public $request_curldata;


public function newlogin(){

$this->oauth_para['oauth_callback']=$this->Callback_URL;
$this->oauth_para['oauth_consumer_key']=$this->oauth_consumer_key;
$this->oauth_para['oauth_nonce']=md5(microtime().mt_rand());
$this->oauth_para['oauth_signature_method']=$this->oauth_signature_method;
$this->oauth_para['oauth_timestamp']=time();
$this->oauth_para['oauth_version']=$this->oauth_version;
$this->oauth_para['oauth_signature']='';
$this->signature_key=rawurlencode($this->oauth_consumer_key_secret).'&';
}

public function oauth_set(){

//oauth_signature
ksort($this->oauth_para);
$temp=array();
foreach ($this->oauth_para as $key=>$val){
if(!empty($val)){
$temp[count($temp)]=$key.'='.rawurlencode($val);
}
}

$bas_sting=implode('&',$temp);
$this->signature_base_string=rawurlencode($this->request_type).'&'.rawurlencode($this->Request_token_URL).'&'.rawurlencode($bas_sting);

if($this->debug=='on'){
echo '<pre>';
echo __LINE__;
print_r($this->signature_base_string);
}

// NG $this->oauth_para['oauth_signature']=rawurlencode(base64_encode(hash_hmac('sha1',$this->signature_base_string,$this->signature_key,true)));
$this->oauth_para['oauth_signature']=base64_encode(hash_hmac('sha1',$this->signature_base_string,$this->signature_key,true));
$this->oauth_signature=$this->oauth_para['oauth_signature'];

if($this->debug=='on'){
echo '<pre>';
echo __LINE__;
print_r($temp);
}


//Authorization: OAuth
ksort($this->oauth_para);
$temp1=array();
$temp2=array();

foreach ($this->oauth_para as $key=>$val){
if(!empty($val)){
$temp1[count($temp1)]=$key.'="'.urlencode($val).'"';
//if ($key!='oauth_callback'){
$temp2[count($temp2)]=$key.'='.urlencode(rawurldecode($val));
//}
}
}

$this->Authorization_header='Authorization: OAuth '.implode(', ',$temp1);

if($this->debug=='on'){
echo '<pre><br>';
echo __LINE__;
print_r($temp1);
}

//利用しない
$this->request_curldata=implode('&',$temp2);
if($this->debug=='on'){
echo '<pre><br>';
echo __LINE__;
print_r($temp2);
}

}



public function send_curl(){

//CURL 送信
$ch=curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,true);
//curl_setopt($ch, CURLOPT_HTTPHEADER, array($this->Authorization_header,'Content-Length:','Expect:','Content-Tpye:'));
curl_setopt($ch, CURLOPT_HTTPHEADER, array($this->Authorization_header));

if($this->request_type=='GET'){
//GET動かない
$geturl=$this->Request_token_URL.'?'.$this->request_curldata;
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->request_curldata);
curl_setopt($ch, CURLOPT_URL, $geturl);
curl_setopt($ch, CURLOPT_HTTPGET, true);
}

if($this->request_type=='POST'){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, $this->Request_token_URL);
}

//curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
//echo $this->response_josn = json_decode(curl_exec($ch));
echo $this->response_josn = curl_exec($ch);
$this->curlgetinfo=curl_getinfo($ch,CURLINFO_HEADER_OUT);
$this->curlgetinfo=curl_getinfo($ch);
//var_dump(curl_error($ch));
//var_dump($this->response_josn);
curl_close($ch);
}



public function debug(){

//Debug
echo '<br>/////////Debut///////////////////';
echo '<br><pre>';
echo 'request_datas<br>';
//echo print_r($this->request_datas);
echo '<br><br>';
echo 'Signature base string<br>';
echo $this->signature_base_string;
echo '<br><br>';
echo 'oauth_signature<br>';
echo $this->oauth_signature;
echo '<br><br>';
echo 'Authorization header<br>';
echo $this->Authorization_header;
echo '<br><br>';
echo 'Curl data<br>';
echo $this->request_curldata;
echo '<br><br>';
echo 'Curl_getinfo<br>';
echo print_r($this->curlgetinfo);
echo '<br><br>';
echo 'JOSN data<br>';
echo print_r($this->response_josn);
echo '<br><br>';
echo '/////////Debut///////////////////';

}


}





?>

2013年9月16日月曜日

直接アクセス時にメッセージ

public $Request_token_URL='https://api.twitter.com/oauth/request_token';
public $Authorize_URL='https://api.twitter.com/oauth/authorize';
public $Access_token_URL='https://api.twitter.com/oauth/access_token';


直接アクセス時にメッセージ

https://api.twitter.com/oauth/authorize

エラーが発生しました
このページに対するリクエスト・トークンがありません。アプリケーションがTwitterアカウントを使用するかどうかを確認するために必要な特殊キーです。 送信したサイトまたはアプリケーションに戻って再度お試しください。何らかの手違いがあったかもしれません。




https://api.twitter.com/oauth/request_token

Failed to validate oauth signature and token






https://api.twitter.com/oauth/access_token

Invalid request token

2013年9月14日土曜日

REST API v1.1 動作確認 の続き

修正しました。
GET が動くようになった。

<?php
//date_default_timezone_set('Asia/Tokyo');
//echo '<br>--------timezone------<br>';
//echo date_default_timezone_get();
//echo '<br>--------timezone------<br>';
?>

<?php
//$paras['status']=rawurlencode('GET  動くようになった');
//$paras['since_id']=rawurlencode('14927799');
//$paras['count']=rawurlencode('50');
//$paras['since_id']=rawurlencode('259320959964680190');
//$paras['max_id']=rawurlencode('259320959964680500');
//$paras['q']=rawurlencode("アイドル");
//$paras['q']=rawurlencode('in China');


//$url='https://api.twitter.com/1.1/friends/ids.json';
$url='https://api.twitter.com/1.1/friendships/lookup.json';

$x=new twoauth('GET',$url,$paras);
$x->oauth_signature();
$x->send_curl();
$x->debug();

?>

<?php

class twoauth {
public $oauth_para=array();
public $oauth_consumer_key= '****************************';
public $oauth_consumer_key_secret= '*****************************';
public $oauth_token= '**************************************';
public $oauth_token_secret= '***********************************';
public $oauth_callback= 'http://www.xxx.com';
public $oauth_signature_method= 'HMAC-SHA1';
public $oauth_version= '1.0';
public $useragent = 'TwitterOAuth v0.2.0-beta2';

public $request_datas=array();
public $request_curldata;
public $request_type;
public $request_url;
public $signature_base_string;
public $signature_key;
public $oauth_signature;
public $Authorization_header;
public $curlgetinfo;
public $response_josn;


public function twoauth ($retype='POST',$url,$datas=null){

$this->oauth_para['oauth_consumer_key']=$this->oauth_consumer_key;
$this->oauth_para['oauth_signature_method']=$this->oauth_signature_method;
$this->oauth_para['oauth_token']=$this->oauth_token;
$this->oauth_para['oauth_version']=$this->oauth_version;
$this->oauth_para['oauth_nonce']=md5(microtime().mt_rand());
$this->oauth_para['oauth_timestamp']=time();
$this->oauth_para['oauth_signature'];
$this->signature_key=rawurlencode($this->oauth_consumer_key_secret).'&'.rawurlencode($this->oauth_token_secret);
$this->request_type=$retype;
$this->request_datas=$datas;
$this->request_url=$url;

}



public function oauth_signature(){

$bas_para=array();
if(!empty($this->request_datas) and $this->request_datas!=null){
$bas_para=$this->oauth_para + $this->request_datas;
}else{
$bas_para=$this->oauth_para;
}

ksort($bas_para);
$temp=array();
foreach ($bas_para as $key=>$val){
$temp[count($temp)]=$key.'='.$val;
}
$bas_sting=rawurlencode(implode('&',$temp));

$this->signature_base_string=$this->request_type.'&'.rawurlencode($this->request_url).'&'.$bas_sting;
$this->oauth_signature=rawurlencode(base64_encode(hash_hmac('sha1',$this->signature_base_string,sprintf($this->signature_key),true)));
$this->oauth_para['oauth_signature']=$this->oauth_signature;

ksort($this->oauth_para);
$temp=array();
foreach ($this->oauth_para as $key=>$val){
$temp[count($temp)]=$key.'="'.$val.'"';
}
$this->Authorization_header='Authorization: OAuth '.(implode(', ',$temp));

if (count($this->request_datas)!=0){
ksort($this->request_datas);
$temp=array();
if ($this->request_datas!=''){
foreach ($this->request_datas as $key=>$val){
$temp[count($temp)]=$key.'='.urlencode(rawurldecode($val));
}
}
$this->request_curldata=implode('&',$temp);
}else{
$this->request_curldata=abc;
}
}


public function send_curl(){

$ch=curl_init();
//curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
if ($this->request_curldata!=null){
if ($this->request_type=='POST'){
//POST
curl_setopt($ch, CURLOPT_URL, $this->request_url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->request_curldata);
}else if($this->request_type=='GET'){
//GET
if(!empty($this->request_datas)){
curl_setopt($ch, CURLOPT_URL, $this->request_url.'?'.rawurldecode(http_build_query($this->request_datas)));
}else{
curl_setopt($ch, CURLOPT_URL, $this->request_url);
}
}else{
//
exit("not support ($this->request_type) HTTP Methods");
}
}
curl_setopt($ch, CURLOPT_HTTPHEADER, array($this->Authorization_header));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,true);
$this->response_josn = json_decode(curl_exec($ch));
$this->curlgetinfo=curl_getinfo($ch,CURLINFO_HEADER_OUT);
curl_close($ch);
}





public function debug(){

echo '<br><pre>';
echo 'request_datas<br>';
echo var_dump($this->request_datas);
echo '<br><br>';
echo 'Signature base string<br>';
echo $this->signature_base_string;
echo '<br><br>';
echo 'oauth_signature<br>';
echo $this->oauth_signature;
echo '<br><br>';
echo 'Authorization header<br>';
echo $this->Authorization_header;
echo '<br><br>';
echo 'Curl data<br>';
echo $this->request_curldata;
echo '<br><br>';
echo 'Curl_getinfo<br>';
echo var_dump($this->curlgetinfo);
echo '<br><br>';
echo 'JOSN data<br>';
echo var_dump($this->response_josn);
echo '<br><br>';

}

}




?>