Created
July 16, 2012 04:07
-
-
Save cherenkov/3120453 to your computer and use it in GitHub Desktop.
「・・・Twitter APIを勉強しています」 http://q.hatena.ne.jp/134.. - 人力検索はてな http://q.hatena.ne.jp/1342403785
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
取り敢えず、前回の質問にあった http://1811way.com/work008/sample&source.txt を動かしてみました。 | |
(回答時はちゃんと読んでいませんでした。スミマセン) | |
前回のエラーメッセージ、 | |
「Warning: include(HTTP/OAuth/Consumer.php) [function.include]: failed to open stream: No such file or directory in C:\Tools\htdocs\twitterapi\twitter_oauth.php on line 25」 | |
などは、 | |
include 'HTTP/OAuth/Consumer.php'; | |
したときにPEARのパスが通っていなかったのでHTTP_OAuthが読み込めていないというものです。 | |
まずこれを直していきます。 | |
今回、PEARライブラリの導入にpearコマンドは使わない方法で進めます。 | |
(レンタルサーバなどで使えなかったり、コマンド一発でインストールできない場合もあるので) | |
まずファイルの位置関係を確認。 | |
twitter_oauth.php | |
PEARフォルダ | |
HTMLフォルダ | |
OAuthフォルダ (HTML_OAuth) | |
Request2フォルダ (HTTP_Request2) | |
OAuth.php (HTML_OAuth) | |
Request2.php (HTTP_Request2) | |
Netフォルダ | |
URL2.php (Net_URL2) | |
include_path.php | |
include_path.phpは以下の内容。include_path.phpがある場所をパスに追加する働き。 | |
------- | |
<?php | |
define('PEAR_PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR); | |
set_include_path(PEAR_PATH . PATH_SEPARATOR . get_include_path()); | |
------- | |
参考: | |
CakePHP で PEAR (Services_Twitter) を使う方法 | ウェブル | |
http://weble.org/2010/04/11/cakephp-pear | |
Manual :: 共有ホストでの PEAR のローカルコピーのインストール | |
http://pear.php.net/manual/ja/installation.shared.php | |
twitter_oauth.phpでは以下のようにする。 | |
include 'PEAR/include_path.php'; //独自に設置したPEARフォルダのpathを通す | |
include 'HTTP/OAuth/Consumer.php'; //正しく読み込まれるはず | |
これで一応動作確認ができました。 | |
PEARライブラリの読み込みなんてものは、パスが通っている場所からただファイルを呼び出しているだけと分かっていただけたら、 | |
include_path.phpの仕組みを使わずに、 | |
http://q.hatena.ne.jp/1341977178#a1155952 | |
にある通りphp.iniで元々設定されている C:\php5\PEAR\ などにPEARライブラリをコピーするだけでもいいと思います。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Twitter OAuth sample | |
--以下エラーメッセージ | |
Warning: include(HTTP/OAuth/Consumer.php) [function.include]: failed to open stream: No such file or directory in C:\Tools\htdocs\twitterapi\twitter_oauth.php on line 25 | |
Warning: include() [function.include]: Failed opening 'HTTP/OAuth/Consumer.php' for inclusion (include_path='.;C:\php5\includes;C:\php5\PEAR;C:\ZendFramework\library') in C:\Tools\htdocs\twitterapi\twitter_oauth.php on line 25 | |
Fatal error: Class 'HTTP_OAuth_Consumer' not found in C:\Tools\htdocs\twitterapi\twitter_oauth.php on line 28 | |
--エラーメッセージ以上 | |
--以下ダウンロードした「twitter_oauth.php」のソースプログラム | |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> | |
<html lang="ja"> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
<title>Twitter OAuth sample</title> | |
</head> | |
<body> | |
<h1>Twitter OAuth sample</h1> | |
<?php | |
//セッションスタート | |
session_start(); | |
//コールバックURLを設定 | |
$url = 'None'; | |
//consumer_keyを設定 | |
$consumer_key = '***************************'; | |
//consumer_secretを設定 | |
$consumer_secret = '*************************'; | |
//HTTP_OAuthライブラリを読み込む | |
include 'HTTP/OAuth/Consumer.php'; | |
//HTTP_OAuthを利用するための各種設定 | |
$consumer = new HTTP_OAuth_Consumer($consumer_key, $consumer_secret); | |
$http_request = new HTTP_Request2(); | |
$http_request->setConfig('ssl_verify_peer', false); | |
$consumer_request = new HTTP_OAuth_Consumer_Request; | |
$consumer_request->accept($http_request); | |
$consumer->accept($consumer_request); | |
//Twitter認証済みかチェック | |
if( isset($_SESSION['access_token']) ){ | |
//認証済みの場合 | |
//状態チェック | |
if( isset($_GET['logout']) ){ | |
//ログアウトする場合 | |
if($_GET['logout'] == 'on'){ | |
//セッションを破棄する | |
session_destroy(); | |
//ログアウト表示 | |
echo '<a href="'.$url.'">ログアウトしました。ここをクリックしてください。</a>'; | |
} | |
}else if( isset($_POST['q']) && ($_POST['q'] != "") ){ | |
//フォームからつぶやきが投稿されていた場合 | |
//保存しておいたアクセストークンを読み出して設定する | |
$consumer->setToken($_SESSION['access_token']); | |
$consumer->setTokenSecret($_SESSION['access_token_secret']); | |
//つぶやき内容を設定 | |
$status = $_POST['q']; | |
//APIを利用してツイッターに投稿 | |
$response = $consumer->sendRequest("http://api.twitter.com/1/statuses/update.xml", array('status' => $status), "POST"); | |
//レスポンスXMLを解析する | |
$xml = simplexml_load_string($response->getBody()); | |
if(isset($xml->id)){ | |
//無事投稿できていたら、投稿内容を確認するリンクを表示 | |
echo '<a href="http://twitter.com/'.$xml->user->screen_name.'/status/'.$xml->id.'">投稿内容を確認する</a>'; | |
}else{ | |
//投稿できなかった場合はエラー表示 | |
echo 'うまく投稿できなかったようです。<br>'; | |
echo $response->getBody(); | |
} | |
}else{ | |
//それ以外の場合 | |
//つぶやきフォームを表示 | |
echo <<<postform | |
<p>いまどうしてる?</p> | |
<form method="POST" action="twitter_oauth.php"> | |
<input type="text" name="q" size="80"> | |
<input type="submit" value="ツイート"> | |
</form> | |
<p><a href="twitter_oauth.php?logout=on">ログアウトしたい場合はこちら</a></p> | |
postform; | |
//保存しておいたアクセストークンを読み出して設定する | |
$consumer->setToken($_SESSION['access_token']); | |
$consumer->setTokenSecret($_SESSION['access_token_secret']); | |
//APIを利用してホームタイムラインを取得 | |
$response = $consumer->sendRequest("http://api.twitter.com/1/statuses/home_timeline.xml", array('count' => '20'), "GET"); | |
//ユーザータイムラインを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/statuses/user_timeline.xml", array('count' => '20','screen_name' => 'zapa'), "GET"); | |
//APIを利用してmentionsを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/statuses/mentions.xml", array('count' => '20'), "GET"); | |
//APIを利用してあなたのリツイートを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/statuses/retweeted_by_me.xml", array('count' => '20'), "GET"); | |
//APIを利用してみんなのリツイートを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/statuses/retweeted_to_me.xml", array('count' => '20'), "GET"); | |
//APIを利用してリツイートされたあなたのツイートを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/statuses/retweets_of_me.xml", array('count' => '20'), "GET"); | |
//APIを利用してお気に入りを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/favorites.xml", array('id' => 'zapa'), "GET"); | |
//APIを利用してリストを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/amntwit/lists/amnpartnerlist/statuses.xml", array('per_page' => '20'), "GET"); | |
//レスポンスXMLを解析する | |
$xml = simplexml_load_string($response->getBody()); | |
if(isset($xml->status->id)){ | |
//無事取得できていたら、内容を表示する | |
foreach($xml->status as $status){ | |
echo '<img src="'.$status->user->profile_image_url.'" width=48 height=48> '; | |
echo '<a href="http://twitter.com/'.$status->user->screen_name.'">'.$status->user->screen_name.'</a>:'; | |
echo $status->text; | |
echo ' <a href="http://twitter.com/'.$status->user->screen_name.'/status/'.$status->id.'">'.$status->created_at."</a><br>\n"; | |
} | |
}else{ | |
//投稿できなかった場合はエラー表示 | |
echo 'うまく取得できなかったようです。<br>'; | |
echo '<pre>'.htmlspecialchars($response->getBody(), ENT_QUOTES).'</pre>'; | |
} | |
} | |
}else{ | |
//認証済みでない場合 | |
//Twitterからのコールバックかチェック | |
if( isset($_GET['oauth_verifier']) ){ | |
//Twitterからのコールバックの場合 | |
//oauth_verifierを取得する | |
$verifier = $_GET['oauth_verifier']; | |
//保存しておいたリクエストトークンを読み出して設定する | |
$consumer->setToken($_SESSION['request_token']); | |
$consumer->setTokenSecret($_SESSION['request_token_secret']); | |
//アクセストークンを取得する | |
$consumer->getAccessToken('https://twitter.com/oauth/access_token', $verifier); | |
//アクセストークンをセッションに保存 | |
$_SESSION['access_token'] = $consumer->getToken(); | |
$_SESSION['access_token_secret'] = $consumer->getTokenSecret(); | |
//認証完了表示 | |
echo '<a href="'.$url.'">認証完了。ここをクリックしてください。</a>'; | |
}else{ | |
//認証済みでなく、Twitterからのコールバックでもない場合 | |
//リクエストトークンを取得 | |
$callback = $url; | |
$consumer->getRequestToken('https://twitter.com/oauth/request_token', $callback); | |
//リクエストトークンをセッションに保存 | |
$_SESSION['request_token'] = $consumer->getToken(); | |
$_SESSION['request_token_secret'] = $consumer->getTokenSecret(); | |
//認証用URLを取得 | |
$auth_url = $consumer->getAuthorizeUrl('https://twitter.com/oauth/authorize'); | |
//認証用URLのリンクを表示 | |
echo '<a href="'.$auth_url.'">Twitterで認証する</a><br>'; | |
} | |
} | |
?> | |
<hr> | |
</body> | |
</html> | |
--以上 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Twitter OAuth sample | |
--以下エラーメッセージ | |
Warning: include(HTTP/OAuth/Consumer.php) [function.include]: failed to open stream: No such file or directory in C:\Tools\htdocs\twitterapi\twitter_oauth.php on line 25 | |
Warning: include() [function.include]: Failed opening 'HTTP/OAuth/Consumer.php' for inclusion (include_path='.;C:\php5\includes;C:\php5\PEAR;C:\ZendFramework\library') in C:\Tools\htdocs\twitterapi\twitter_oauth.php on line 25 | |
Fatal error: Class 'HTTP_OAuth_Consumer' not found in C:\Tools\htdocs\twitterapi\twitter_oauth.php on line 28 | |
--エラーメッセージ以上 | |
--以下ダウンロードした「twitter_oauth.php」のソースプログラム | |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> | |
<html lang="ja"> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
<title>Twitter OAuth sample</title> | |
</head> | |
<body> | |
<h1>Twitter OAuth sample</h1> | |
<?php | |
//セッションスタート | |
session_start(); | |
//コールバックURLを設定 | |
$url = 'None'; | |
//consumer_keyを設定 | |
$consumer_key = '***************************'; | |
//consumer_secretを設定 | |
$consumer_secret = '*************************'; | |
//HTTP_OAuthライブラリを読み込む | |
include 'HTTP/OAuth/Consumer.php'; | |
//HTTP_OAuthを利用するための各種設定 | |
$consumer = new HTTP_OAuth_Consumer($consumer_key, $consumer_secret); | |
$http_request = new HTTP_Request2(); | |
$http_request->setConfig('ssl_verify_peer', false); | |
$consumer_request = new HTTP_OAuth_Consumer_Request; | |
$consumer_request->accept($http_request); | |
$consumer->accept($consumer_request); | |
//Twitter認証済みかチェック | |
if( isset($_SESSION['access_token']) ){ | |
//認証済みの場合 | |
//状態チェック | |
if( isset($_GET['logout']) ){ | |
//ログアウトする場合 | |
if($_GET['logout'] == 'on'){ | |
//セッションを破棄する | |
session_destroy(); | |
//ログアウト表示 | |
echo '<a href="'.$url.'">ログアウトしました。ここをクリックしてください。</a>'; | |
} | |
}else if( isset($_POST['q']) && ($_POST['q'] != "") ){ | |
//フォームからつぶやきが投稿されていた場合 | |
//保存しておいたアクセストークンを読み出して設定する | |
$consumer->setToken($_SESSION['access_token']); | |
$consumer->setTokenSecret($_SESSION['access_token_secret']); | |
//つぶやき内容を設定 | |
$status = $_POST['q']; | |
//APIを利用してツイッターに投稿 | |
$response = $consumer->sendRequest("http://api.twitter.com/1/statuses/update.xml", array('status' => $status), "POST"); | |
//レスポンスXMLを解析する | |
$xml = simplexml_load_string($response->getBody()); | |
if(isset($xml->id)){ | |
//無事投稿できていたら、投稿内容を確認するリンクを表示 | |
echo '<a href="http://twitter.com/'.$xml->user->screen_name.'/status/'.$xml->id.'">投稿内容を確認する</a>'; | |
}else{ | |
//投稿できなかった場合はエラー表示 | |
echo 'うまく投稿できなかったようです。<br>'; | |
echo $response->getBody(); | |
} | |
}else{ | |
//それ以外の場合 | |
//つぶやきフォームを表示 | |
echo <<<postform | |
<p>いまどうしてる?</p> | |
<form method="POST" action="twitter_oauth.php"> | |
<input type="text" name="q" size="80"> | |
<input type="submit" value="ツイート"> | |
</form> | |
<p><a href="twitter_oauth.php?logout=on">ログアウトしたい場合はこちら</a></p> | |
postform; | |
//保存しておいたアクセストークンを読み出して設定する | |
$consumer->setToken($_SESSION['access_token']); | |
$consumer->setTokenSecret($_SESSION['access_token_secret']); | |
//APIを利用してホームタイムラインを取得 | |
$response = $consumer->sendRequest("http://api.twitter.com/1/statuses/home_timeline.xml", array('count' => '20'), "GET"); | |
//ユーザータイムラインを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/statuses/user_timeline.xml", array('count' => '20','screen_name' => 'zapa'), "GET"); | |
//APIを利用してmentionsを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/statuses/mentions.xml", array('count' => '20'), "GET"); | |
//APIを利用してあなたのリツイートを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/statuses/retweeted_by_me.xml", array('count' => '20'), "GET"); | |
//APIを利用してみんなのリツイートを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/statuses/retweeted_to_me.xml", array('count' => '20'), "GET"); | |
//APIを利用してリツイートされたあなたのツイートを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/statuses/retweets_of_me.xml", array('count' => '20'), "GET"); | |
//APIを利用してお気に入りを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/favorites.xml", array('id' => 'zapa'), "GET"); | |
//APIを利用してリストを取得 | |
// $response = $consumer->sendRequest("http://api.twitter.com/1/amntwit/lists/amnpartnerlist/statuses.xml", array('per_page' => '20'), "GET"); | |
//レスポンスXMLを解析する | |
$xml = simplexml_load_string($response->getBody()); | |
if(isset($xml->status->id)){ | |
//無事取得できていたら、内容を表示する | |
foreach($xml->status as $status){ | |
echo '<img src="'.$status->user->profile_image_url.'" width=48 height=48> '; | |
echo '<a href="http://twitter.com/'.$status->user->screen_name.'">'.$status->user->screen_name.'</a>:'; | |
echo $status->text; | |
echo ' <a href="http://twitter.com/'.$status->user->screen_name.'/status/'.$status->id.'">'.$status->created_at."</a><br>\n"; | |
} | |
}else{ | |
//投稿できなかった場合はエラー表示 | |
echo 'うまく取得できなかったようです。<br>'; | |
echo '<pre>'.htmlspecialchars($response->getBody(), ENT_QUOTES).'</pre>'; | |
} | |
} | |
}else{ | |
//認証済みでない場合 | |
//Twitterからのコールバックかチェック | |
if( isset($_GET['oauth_verifier']) ){ | |
//Twitterからのコールバックの場合 | |
//oauth_verifierを取得する | |
$verifier = $_GET['oauth_verifier']; | |
//保存しておいたリクエストトークンを読み出して設定する | |
$consumer->setToken($_SESSION['request_token']); | |
$consumer->setTokenSecret($_SESSION['request_token_secret']); | |
//アクセストークンを取得する | |
$consumer->getAccessToken('https://twitter.com/oauth/access_token', $verifier); | |
//アクセストークンをセッションに保存 | |
$_SESSION['access_token'] = $consumer->getToken(); | |
$_SESSION['access_token_secret'] = $consumer->getTokenSecret(); | |
//認証完了表示 | |
echo '<a href="'.$url.'">認証完了。ここをクリックしてください。</a>'; | |
}else{ | |
//認証済みでなく、Twitterからのコールバックでもない場合 | |
//リクエストトークンを取得 | |
$callback = $url; | |
$consumer->getRequestToken('https://twitter.com/oauth/request_token', $callback); | |
//リクエストトークンをセッションに保存 | |
$_SESSION['request_token'] = $consumer->getToken(); | |
$_SESSION['request_token_secret'] = $consumer->getTokenSecret(); | |
//認証用URLを取得 | |
$auth_url = $consumer->getAuthorizeUrl('https://twitter.com/oauth/authorize'); | |
//認証用URLのリンクを表示 | |
echo '<a href="'.$auth_url.'">Twitterで認証する</a><br>'; | |
} | |
} | |
?> | |
<hr> | |
</body> | |
</html> | |
--以上 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment