Twitter API 버전 1.1에서 user_timeline을 검색하는 가장 간단한 PHP 예제
2013년 6월 11일부로 Twitter API 1.0이 폐지되었기 때문에 아래 스크립트가 작동하지 않습니다.
// Create curl resource
$ch = curl_init();
// Set url
curl_setopt($ch, CURLOPT_URL, "http://twitter.com/statuses/user_timeline/myscreenname.json?count=10");
// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
// Close curl resource to free up system resources
curl_close($ch);
if ($output)
{
$tweets = json_decode($output,true);
foreach ($tweets as $tweet)
{
print_r($tweet);
}
}
가능한 한 최소한의 코드로 user_timeline(최근 상태)을 취득하려면 어떻게 해야 합니까?
https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline 를 찾았습니다만, 다음의 에러가 표시됩니다.
"{"errors":[{"message":"Could not authenticate you","code":32}]}"
많은 클래스가 있습니다만, Twitter의 업데이트로 인해 몇 개 시도해보니 아무것도 작동하지 않는 것 같습니다.또, 그 중 몇 개는, 정말로 필요 없는 기능이 많이 있는 꽤 고도의 클래스이기도 합니다.
PHP를 사용하여 최근 사용자 상태를 얻는 가장 간단한 방법은 무엇입니까?
중요사항:2018년 중반부터 twitter API 토큰을 얻는 과정은 훨씬 더 관료적이 되었습니다.API 토큰 세트를 제공받는데 1주일이 넘게 걸렸어요.이것은 Packagist에 120만 개 이상의 설치와 Github에 160만 개의 별을 설치한 여러분들과 소녀들을 위한 오픈 소스 프로젝트입니다.이거는 이론적으로 더 우선순위가 높아야 합니다.
작업을 위해 twitter API를 사용해야 하는 경우, 이 매우 긴 대기 시간을 고려해야 합니다.또한 페이스북이나 Instagram과 같은 다른 소셜 미디어 수단을 고려하여 토큰을 즉시 회수할 수 있도록 이러한 옵션을 제공하십시오.
Twitter v1.1 API를 사용하시겠습니까?
주의: 이러한 파일은 GitHub에 있습니다.
버전 1.0은 곧 폐지될 예정이며 승인되지 않은 요청은 허용되지 않습니다.그래서, 이것을 가능하게 하기 위해서, PHP 클래스와 함께 투고합니다.
1. 개발자 계정을 만듭니다.Twitter에서 개발자 계정을 직접 설정하세요.
공식 트위터 개발자 사이트를 방문하여 개발자 계정을 등록해야 합니다.이는 v1.1 API에 대한 요청을 작성하기 위해 필요한 무료 단계입니다.
2. 어플리케이션을 만듭니다.Twitter 개발자 사이트에서 응용 프로그램 만들기
네? 인증되지 않은 요청을 할 수 있을 거라 생각했나요?Twitter의 v1.1 API에서는 사용할 수 없습니다.http://dev.twitter.com/apps에 접속하여 [Create Application]버튼을 클릭해 주세요.
이 페이지에서 원하는 세부 정보를 입력합니다.스팸 팔로워를 없애기 위해 차단 요청을 많이 하고 싶었기 때문에 저는 상관없습니다.요점은 어플리케이션에 사용할 고유한 키 세트를 얻는다는 것입니다.
따라서 애플리케이션을 만드는 목적은 자신(및 트위터)에게 일련의 키를 주는 것입니다.다음과 같습니다.
- 컨슈머 키
- 소비자 비밀
- 액세스 토큰
- 액세스 토큰 비밀
이 토큰의 용도는 여기에 기재되어 있습니다.
3. 액세스 토큰 작성:요청을 성공시키기 위해서는 이것이 필요합니다.
OAuth는 몇 개의 토큰을 요구합니다.그래서 당신을 위해 그것들을 생성해야 합니다.
맨 아래에 있는 "액세스 토큰 만들기"를 클릭합니다.다시 맨 아래로 스크롤하면 새로 생성된 키가 나타납니다.API 호출을 위해 이 페이지에서 이전에 라벨이 지정된 4개의 키를 가져와야 합니다.따라서 그것들을 메모해 두세요.
4. 액세스 레벨 변경:읽기 전용은 아니죠?
이 API를 제대로 사용하려면 GET 요청을 사용하여 표준 데이터 검색 이외의 작업을 수행할 경우 Read & Write로 설정을 변경해야 합니다.
페이지 맨 위에 있는 "설정" 탭을 선택합니다.
응용 프로그램의 읽기/쓰기 액세스 권한을 부여하고 맨 아래에 있는 "업데이트"를 누릅니다.
Twitter가 사용하는 응용 프로그램 권한 모델에 대한 자세한 내용은 여기를 참조하십시오.
5. API에 접속하기 위한 코드 작성: 대부분의 작업을 내가 대신했다.
위의 코드와 약간의 수정 및 변경을 조합하여 PHP 클래스로 만들었기 때문에 필요한 요청을 쉽게 할 수 있습니다.
이것은 OAuth와 Twitter v1.1 API, 그리고 아래에 나와 있는 제가 만든 클래스를 사용합니다.
require_once('TwitterAPIExchange.php');
/** Set access tokens here - see: https://dev.twitter.com/apps/ **/
$settings = array(
'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN",
'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET",
'consumer_key' => "YOUR_CONSUMER_KEY",
'consumer_secret' => "YOUR_CONSUMER_SECRET"
);
위의 응용 프로그램에서 가져온 키를 각각의 공간에 넣어야 합니다.
다음으로 요청처의 URL을 선택해야 합니다.Twitter에는 어떤 URL과 요청 유형(POST 또는 GET)을 선택할 때 도움이 되는 API 문서가 있습니다.
/** URL for REST request, see: https://dev.twitter.com/docs/api/1.1/ **/
$url = 'https://api.twitter.com/1.1/blocks/create.json';
$requestMethod = 'POST';
이 메뉴얼에서는, 각 URL 에 건네줄 수 있는 내용이 기재되어 있습니다.위와 같은 "blocks" URL을 사용하면 다음 POST 파라미터를 전달할 수 있습니다.
/** POST fields required by the URL above. See relevant docs as above **/
$postfields = array(
'screen_name' => 'usernameToBlock',
'skip_status' => '1'
);
API를 사용하여 원하는 작업을 설정했으므로 이제 실제 요청을 할 차례입니다.
/** Perform the request and echo the response **/
$twitter = new TwitterAPIExchange($settings);
echo $twitter->buildOauth($url, $requestMethod)
->setPostfields($postfields)
->performRequest();
POST 요청은 이것으로 끝입니다.
GET 요청은 조금 다릅니다.다음은 예를 제시하겠습니다.
/** Note: Set the GET field BEFORE calling buildOauth(); **/
$url = 'https://api.twitter.com/1.1/followers/ids.json';
$getfield = '?username=J7mbo';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
최종 코드 예시:간단한 GET 요청으로 내 팔로워 목록을 요청합니다.
$url = 'https://api.twitter.com/1.1/followers/list.json';
$getfield = '?username=J7mbo&skip_status=1';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
@lackovic10과 @rivers에게 크레딧으로 이 파일들을 GitHub에 올렸습니다!누군가가 유용하다고 생각해 주었으면 합니다.그것은 알고 있습니다(루프의 벌크블록에 사용했습니다).
또, SSL 증명서에 문제가 있는 Windows 의 유저에 대해서는, 이 투고를 참조해 주세요.이 라이브러리는 후드 아래에서 cURL을 사용하기 때문에 cURL 증명서가 설정되어 있는지 확인해야 합니다.구글은 또한 당신의 친구입니다.
dev.twitter.com 에 접속해, 애플리케이션을 작성합니다.그러면 필요한 자격 증명이 제공됩니다.다음은 제가 최근에 PHP와 cURL로 작성한 구현입니다.
<?php
function buildBaseString($baseURI, $method, $params) {
$r = array();
ksort($params);
foreach($params as $key=>$value){
$r[] = "$key=" . rawurlencode($value);
}
return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}
function buildAuthorizationHeader($oauth) {
$r = 'Authorization: OAuth ';
$values = array();
foreach($oauth as $key=>$value)
$values[] = "$key=\"" . rawurlencode($value) . "\"";
$r .= implode(', ', $values);
return $r;
}
$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$oauth_access_token = "YOURVALUE";
$oauth_access_token_secret = "YOURVALUE";
$consumer_key = "YOURVALUE";
$consumer_secret = "YOURVALUE";
$oauth = array( 'oauth_consumer_key' => $consumer_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => $oauth_access_token,
'oauth_timestamp' => time(),
'oauth_version' => '1.0');
$base_info = buildBaseString($url, 'GET', $oauth);
$composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
$oauth['oauth_signature'] = $oauth_signature;
// Make requests
$header = array(buildAuthorizationHeader($oauth), 'Expect:');
$options = array( CURLOPT_HTTPHEADER => $header,
//CURLOPT_POSTFIELDS => $postfields,
CURLOPT_HEADER => false,
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false);
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);
$twitter_data = json_decode($json);
//print it out
print_r ($twitter_data);
?>
이는 명령줄에서 실행할 수 있습니다.
$ php <name of PHP script>.php
리버스가 붙인 암호는 훌륭하다.정말 고마워.저는 이곳에 처음 와서 코멘트를 드릴 수 없습니다.그냥 하비에르브드의 질문에 답하고 싶습니다(스크린n_n아메를 어떻게 설정하고 이 접근방식으로 계산하시겠습니까?).알아내는 데 시간이 많이 걸려서요.
URL과 시그니처 작성 프로세스 모두에 파라미터를 추가해야 합니다.서명을 만드는 것이 저에게 도움이 된 기사입니다.코드는 다음과 같습니다.
$oauth = array(
'screen_name' => 'DwightHoward',
'count' => 2,
'oauth_consumer_key' => $consumer_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => $oauth_access_token,
'oauth_timestamp' => time(),
'oauth_version' => '1.0'
);
$options = array(
CURLOPT_HTTPHEADER => $header,
//CURLOPT_POSTFIELDS => $postfields,
CURLOPT_HEADER => false,
CURLOPT_URL => $url . '?screen_name=DwightHoward&count=2',
CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false
);
다른 답변과 마찬가지로 Twitter 앱을 만들어 토큰, 키, 비밀을 얻습니다.를 한 곳에서 및한 오류)를 할 수 .$request
로 에 returnTweet()
★★★★★★★★★★★★★★★★★★」
function buildBaseString($baseURI, $method, $params) {
$r = array();
ksort($params);
foreach($params as $key=>$value){
$r[] = "$key=" . rawurlencode($value);
}
return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}
function buildAuthorizationHeader($oauth) {
$r = 'Authorization: OAuth ';
$values = array();
foreach($oauth as $key=>$value)
$values[] = "$key=\"" . rawurlencode($value) . "\"";
$r .= implode(', ', $values);
return $r;
}
function returnTweet(){
$oauth_access_token = "x";
$oauth_access_token_secret = "x";
$consumer_key = "x";
$consumer_secret = "x";
$twitter_timeline = "user_timeline"; // mentions_timeline / user_timeline / home_timeline / retweets_of_me
// create request
$request = array(
'screen_name' => 'budidino',
'count' => '3'
);
$oauth = array(
'oauth_consumer_key' => $consumer_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => $oauth_access_token,
'oauth_timestamp' => time(),
'oauth_version' => '1.0'
);
// merge request and oauth to one array
$oauth = array_merge($oauth, $request);
// do some magic
$base_info = buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth);
$composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
$oauth['oauth_signature'] = $oauth_signature;
// make request
$header = array(buildAuthorizationHeader($oauth), 'Expect:');
$options = array( CURLOPT_HTTPHEADER => $header,
CURLOPT_HEADER => false,
CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false);
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);
return json_decode($json, true);
}
'전화하세요'라고 불러주세요.returnTweet()
고마워 크리스!
쿼리에 파라미터를 사용하지 않고 동작했습니다.여러 파라미터를 사용할 때마다 32 Cannot authenticate you 오류가 나타납니다.
문제는 앰퍼샌드 부호화였어요코드에는 다음 행이 있습니다.
$url .= "?".http_build_query($query);
아래에 다음 행을 추가했습니다.
$url=str_replace("&","&",$url);
또한 screenn_name 및 count와 같은 두 개 이상의 매개변수를 사용하여 작동했습니다.
전체 코드는 다음과 같습니다.
$token = 'YOUR TOKEN';
$token_secret = 'TOKEN SECRET';
$consumer_key = 'YOUR KEY';
$consumer_secret = 'KEY SECRET';
$host = 'api.twitter.com';
$method = 'GET';
$path = '/1.1/statuses/user_timeline.json'; // api call path
$query = array( // query parameters
'screen_name' => 'twitterapi',
'count' => '2'
);
$oauth = array(
'oauth_consumer_key' => $consumer_key,
'oauth_token' => $token,
'oauth_nonce' => (string)mt_rand(), // a stronger nonce is recommended
'oauth_timestamp' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_version' => '1.0'
);
$oauth = array_map("rawurlencode", $oauth); // must be encoded before sorting
$query = array_map("rawurlencode", $query);
$arr = array_merge($oauth, $query); // combine the values THEN sort
asort($arr); // secondary sort (value)
ksort($arr); // primary sort (key)
// http_build_query automatically encodes, but our parameters
// are already encoded, and must be by this point, so we undo
// the encoding step
$querystring = urldecode(http_build_query($arr, '', '&'));
$url = "https://$host$path";
// mash everything together for the text to hash
$base_string = $method."&".rawurlencode($url)."&".rawurlencode($querystring);
// same with the key
$key = rawurlencode($consumer_secret)."&".rawurlencode($token_secret);
// generate the hash
$signature = rawurlencode(base64_encode(hash_hmac('sha1', $base_string, $key, true)));
// this time we're using a normal GET query, and we're only encoding the query params
// (without the oauth params)
$url .= "?".http_build_query($query);
$url=str_replace("&","&",$url); //Patch by @Frewuill
$oauth['oauth_signature'] = $signature; // don't want to abandon all that work!
ksort($oauth); // probably not necessary, but twitter's demo does it
// also not necessary, but twitter's demo does this too
function add_quotes($str) { return '"'.$str.'"'; }
$oauth = array_map("add_quotes", $oauth);
// this is the full value of the Authorization line
$auth = "OAuth " . urldecode(http_build_query($oauth, '', ', '));
// if you're doing post, you need to skip the GET building above
// and instead supply query parameters to CURLOPT_POSTFIELDS
$options = array( CURLOPT_HTTPHEADER => array("Authorization: $auth"),
//CURLOPT_POSTFIELDS => $postfields,
CURLOPT_HEADER => false,
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false);
// do our business
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);
$twitter_data = json_decode($json);
내가 겪었던 것과 같은 문제를 가진 사람에게 도움이 되길 바라.
이 질문은 나에게 많은 도움을 주었지만 무슨 일이 일어나야 하는지 이해하는데는 도움이 되지 않았다.이 블로그 게시물은 나에게 그것을 설명하는 놀라운 일을 했다.
다음은 중요한 비트를 모두 한 곳에 정리한 것입니다.
- 위에서 지적한 바와 같이 1.1 API 요청에 서명해야 합니다.공개 상태 취득과 같은 작업을 하는 경우 사용자 키 대신 애플리케이션 키가 필요합니다.원하는 페이지의 전체 링크는 https://dev.twitter.com/apps 입니다.
- oauth 파라미터와 get 파라미터(또는 POST 파라미터)를 모두 해시해야 합니다.
- 해시되는 URL 인코딩 형식으로 줄이기 전에 매개 변수를 정렬해야 합니다.
- 예를 들어 파라미터의 url로 인코딩된 값에서 쿼리 문자열을 만든 다음 해당 url을 인코딩하고 메서드 유형 및 URL과 연결합니다.
저는 모든 두통에 공감합니다. 그래서 이 모든 것을 정리할 몇 가지 코드를 알려드리겠습니다.
$token = 'YOUR TOKEN';
$token_secret = 'TOKEN SECRET';
$consumer_key = 'YOUR KEY';
$consumer_secret = 'KEY SECRET';
$host = 'api.twitter.com';
$method = 'GET';
$path = '/1.1/statuses/user_timeline.json'; // api call path
$query = array( // query parameters
'screen_name' => 'twitterapi',
'count' => '2'
);
$oauth = array(
'oauth_consumer_key' => $consumer_key,
'oauth_token' => $token,
'oauth_nonce' => (string)mt_rand(), // a stronger nonce is recommended
'oauth_timestamp' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_version' => '1.0'
);
$oauth = array_map("rawurlencode", $oauth); // must be encoded before sorting
$query = array_map("rawurlencode", $query);
$arr = array_merge($oauth, $query); // combine the values THEN sort
asort($arr); // secondary sort (value)
ksort($arr); // primary sort (key)
// http_build_query automatically encodes, but our parameters
// are already encoded, and must be by this point, so we undo
// the encoding step
$querystring = urldecode(http_build_query($arr, '', '&'));
$url = "https://$host$path";
// mash everything together for the text to hash
$base_string = $method."&".rawurlencode($url)."&".rawurlencode($querystring);
// same with the key
$key = rawurlencode($consumer_secret)."&".rawurlencode($token_secret);
// generate the hash
$signature = rawurlencode(base64_encode(hash_hmac('sha1', $base_string, $key, true)));
// this time we're using a normal GET query, and we're only encoding the query params
// (without the oauth params)
$url .= "?".http_build_query($query);
$oauth['oauth_signature'] = $signature; // don't want to abandon all that work!
ksort($oauth); // probably not necessary, but twitter's demo does it
// also not necessary, but twitter's demo does this too
function add_quotes($str) { return '"'.$str.'"'; }
$oauth = array_map("add_quotes", $oauth);
// this is the full value of the Authorization line
$auth = "OAuth " . urldecode(http_build_query($oauth, '', ', '));
// if you're doing post, you need to skip the GET building above
// and instead supply query parameters to CURLOPT_POSTFIELDS
$options = array( CURLOPT_HTTPHEADER => array("Authorization: $auth"),
//CURLOPT_POSTFIELDS => $postfields,
CURLOPT_HEADER => false,
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false);
// do our business
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);
$twitter_data = json_decode($json);
OAuth PHP 라이브러리가 설치되어 있으면 요청을 직접 작성할 필요가 없습니다.
$oauth = new OAuth($consumer_key, $consumer_secret, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);
$oauth->setToken($access_token, $access_secret);
$oauth->fetch("https://api.twitter.com/1.1/statuses/user_timeline.json");
$twitter_data = json_decode($oauth->getLastResponse());
print_r($twitter_data);
자세한 내용은 문서 또는 예를 참조하십시오.사용할 수 있습니다.pecl install oauth
도서관을 얻으려고요
우선 jimbo와 (그의 투고/twitter-api-php 심플 라이브러리)에 감사하고 싶다.
GET 검색/트위츠 API를 "twitter-api-php" PHP 라이브러리(Twitter)와 함께 사용하는 경우APIExchange.php):
먼저 "POST 요청을 수행하고 응답에 에코" 코드 영역을 코멘트해야 합니다.
"GET 요청 수행 및 응답 에코" 코드를 사용하여 응답을 에코하고 다음 두 줄을 변경합니다.
$url = 'https://api.twitter.com/1.1/followers/ids.json';
$getfield = '?screen_name=J7mbo';
로.
$url = 'https://api.twitter.com/1.1/search/tweets.json';
$getfield = '?q=J7mbo';
(경경))screen_name
로로 합니다.q
:)아까다. :)
Twitter에서 "앱"을 만들려면 가 필요합니다(이 작업을 수행하려면 Twitter 계정이 필요합니다).
그런 다음 OAuth를 사용하여 Twitter에 승인 요청을 해야 합니다.
GET 상태/user_timeline 리소스를 사용하여 최근 트윗 목록을 가져올 수 있습니다.
다음은 타임라인에서 지정된 수의 트윗을 가져오는 간단한 방법입니다.기본적으로 다른 예와 동일한 기능을 수행하지만 코드가 적습니다.
하면 .$count
다음 중 하나:
$url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
$count = '10';
$oauth = array('count' => $count,
'oauth_consumer_key' => '[CONSUMER KEY]',
'oauth_nonce' => md5(mt_rand()),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_token' => '[ACCESS TOKEN]',
'oauth_version' => '1.0');
$oauth['oauth_signature'] = base64_encode(hash_hmac('sha1', 'GET&' . rawurlencode($url) . '&' . rawurlencode(implode('&', array_map(function ($v, $k) { return $k . '=' . $v; }, $oauth, array_keys($oauth)))), '[CONSUMER SECRET]&[ACCESS TOKEN SECRET]', true));
$twitterData = json_decode(file_get_contents($url . '?count=' . $count, false, stream_context_create(array('http' => array('method' => 'GET',
'header' => 'Authorization: OAuth '
. implode(', ', array_map(function ($v, $k) { return $k . '="' . rawurlencode($v) . '"'; }, $oauth, array_keys($oauth))))))));
와 어나니머스 기능을 합니다.file_get_contents
라이브러리가 .c. " " " " " " " 난스하십시오.MD5 の md md md md 。들 다 같이 것 요.time()
단, OAuth에 관한 웹상의 대부분의 예에서는 암호화된 문자열(http://www.sitepoint.com/understanding-oauth-1/) 등)이 사용되고 있습니다.저도 이게 더 이해가 되네요.
추가 사항: 익명 기능을 사용하려면 PHP 5.3+가 필요합니다(서버/컴퓨터가 냉전 상태에 있으며 업그레이드할 수 없는 경우).
시그니처 생성기에서curl
다음 형식의 명령어:
curl --get 'https://api.twitter.com/1.1/statuses/user_timeline.json' --data 'count=2&screen_name=twitterapi' --header 'Authorization: OAuth oauth_consumer_key="YOUR_KEY", oauth_nonce="YOUR_NONCE", oauth_signature="YOUR-SIG", oauth_signature_method="HMAC-SHA1", oauth_timestamp="TIMESTAMP", oauth_token="YOUR-TOKEN", oauth_version="1.0"' --verbose
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET);
$timelines = $connection->get('statuses/user_timeline', array('screen_name' => 'NSE_NIFTY', 'count' => 100, 'include_rts' => 1));
이 실 덕분에, 특히 부디디노는 그의 코드 때문에 나를 깊이 감동시켰기 때문이다.요청에서 JSON 데이터를 가져오는 방법을 알려드리고 싶습니다.코드의 "/create request" 요청 배열을 변경하여 다른 요청을 수행합니다.최종적으로 JSON이 브라우저 화면에 출력됩니다.
<?php
function buildBaseString($baseURI, $method, $params) {
$r = array();
ksort($params);
foreach($params as $key=>$value){
$r[] = "$key=" . rawurlencode($value);
}
return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}
function buildAuthorizationHeader($oauth) {
$r = 'Authorization: OAuth ';
$values = array();
foreach($oauth as $key=>$value)
$values[] = "$key=\"" . rawurlencode($value) . "\"";
$r .= implode(', ', $values);
return $r;
}
function returnTweet(){
$oauth_access_token = "2602299919-lP6mgkqAMVwvHM1L0Cplw8idxJzvuZoQRzyMkOx";
$oauth_access_token_secret = "wGWny2kz67hGdnLe3Uuy63YZs4nIGs8wQtCU7KnOT5brS";
$consumer_key = "zAzJRrPOj5BvOsK5QhscKogVQ";
$consumer_secret = "Uag0ujVJomqPbfdoR2UAWbRYhjzgoU9jeo7qfZHCxR6a6ozcu1";
$twitter_timeline = "user_timeline"; // mentions_timeline / user_timeline / home_timeline / retweets_of_me
// create request
$request = array(
'screen_name' => 'burownrice',
'count' => '3'
);
$oauth = array(
'oauth_consumer_key' => $consumer_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => $oauth_access_token,
'oauth_timestamp' => time(),
'oauth_version' => '1.0'
);
// merge request and oauth to one array
$oauth = array_merge($oauth, $request);
// do some magic
$base_info = buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth);
$composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
$oauth['oauth_signature'] = $oauth_signature;
// make request
$header = array(buildAuthorizationHeader($oauth), 'Expect:');
$options = array( CURLOPT_HTTPHEADER => $header,
CURLOPT_HEADER => false,
CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false);
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);
return $json;
}
$tweet = returnTweet();
echo $tweet;
?>
누구에게나 도움이 된다면...제 블로그에서는 마지막 트윗을 불러오고 가장 관련성이 높은 데이터를 추출하여 MySQL 데이터베이스에 저장하기 위해 다음과 같은 PHP 코드를 구현했습니다.내 블로그에서 얻었기 때문에 효과가 있어.
저장되는 "트위트" 테이블:
CREATE TABLE IF NOT EXISTS `tweets` (
`tweet_id` int(11) NOT NULL auto_increment,
`id_tweet` bigint(20) NOT NULL,
`text_tweet` char(144) NOT NULL,
`datetime_tweet` datetime NOT NULL,
`dayofweek_tweet` char(3) NOT NULL,
`GMT_tweet` char(5) NOT NULL,
`shorturl_tweet` char(23) NOT NULL,
PRIMARY KEY (`tweet_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=83 ;
get_module을 클릭합니다.php:
<?php
function buildBaseString($baseURI, $method, $params) {
$r= array();
ksort($params);
foreach($params as $key=>$value){
$r[]= "$key=".rawurlencode($value);
}
return $method."&".rawurlencode($baseURI).'&'.rawurlencode(implode('&', $r));
}
function buildAuthorizationHeader($oauth) {
$r= 'Authorization: OAuth ';
$values= array();
foreach($oauth as $key=>$value) {
$values[]= "$key=\"".rawurlencode($value)."\"";
}
$r.= implode(', ', $values);
return $r;
}
function returnTweets($last_id) {
$oauth_access_token = "2687912757-vbyfJA483SEyj2HJ2K346aVMxtOIgVbsY4Edrsw";
$oauth_access_token_secret = "nIruzmR0bXqC3has4fTf8KAq4pgOceiuKqjklhroENU4W";
$api_key = "ieDSTFH8QHHPafg7H0whQB9GaY";
$api_secret = "mgm8wVS9YP93IJmTQtsmR8ZJADDNdlTca5kCizMkC7O7gFDS1j";
$twitter_timeline = "user_timeline"; //[mentions_timeline/user_timeline/home_timeline/retweets_of_me]
//create request
$request= array(
'screen_name' => 'runs_ES',
'count' => '3',
'exclude_replies' => 'true'
);
if (!is_null($last_id)) { //Add to the request if it exits a last_id
$request['since_id']= $max_id;
}
$oauth = array(
'oauth_consumer_key' => $api_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => $oauth_access_token,
'oauth_timestamp' => time(),
'oauth_version' => '1.0'
);
//merge request and oauth to one array
$oauth= array_merge($oauth, $request);
//do some magic
$base_info= buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth);
$composite_key= rawurlencode($api_secret).'&'.rawurlencode($oauth_access_token_secret);
$oauth_signature= base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
$oauth['oauth_signature']= $oauth_signature;
//make request
$header= array(buildAuthorizationHeader($oauth), 'Expect:');
$options= array(CURLOPT_HTTPHEADER => $header,
CURLOPT_HEADER => false,
CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false);
$feed= curl_init();
curl_setopt_array($feed, $options);
$json= curl_exec($feed);
curl_close($feed);
return $json;
}
function parse_tweettext($tweet_text) {
$text= substr($tweet_text, 0, -23);
$short_url= substr($tweet_text, -23, 23);
return array ('text'=>$text, 'short_url'=> $short_url);
}
function parse_tweetdatetime($tweetdatetime) {
//Thu Aug 21 21:57:26 +0000 2014 Sun Mon Tue Wed Thu Fri Sat
$months= array('Jan'=>'01', 'Feb'=>'02', 'Mar'=>'03', 'Apr'=>'04', 'May'=>'05', 'Jun'=>'06',
'Jul'=>'07', 'Aug'=>'08', 'Sep'=>'09', 'Oct'=>'10', 'Nov'=>'11', 'Dec'=>'12');
$GMT= substr($tweetdatetime, -10, 5);
$year= substr($tweetdatetime, -4, 4);
$month_str= substr($tweetdatetime, 4, 3);
$month= $months[$month_str];
$day= substr($tweetdatetime, 8, 2);
$dayofweek= substr($tweetdatetime, 0, 3);
$time= substr($tweetdatetime, 11, 8);
$date= $year.'-'.$month.'-'.$day;
$datetime= $date.' '.$time;
return array('datetime'=>$datetime, 'dayofweek'=>$dayofweek, 'GMT'=>$GMT);
//datetime: "YYYY-MM-DD HH:MM:SS", dayofweek: Mon, Tue..., GMT: +####
}
//First check in the database the last id tweet:
$query= "SELECT MAX(tweets.id_tweet) AS id_last FROM tweets;";
$result= exec_query($query);
$row= mysql_fetch_object($result);
if ($result!= 0 && mysql_num_rows($result)) { //if error in query or not results
$last_id= $row->id_last;
}
else {
$last_id= null;
}
$json= returnTweets($last_id);
$tweets= json_decode($json, TRUE);
foreach ($tweets as $tweet) {
$tweet_id= $tweet['id'];
if (!empty($tweet_id)) { //if array is not empty
$tweet_parsetext= parse_tweettext($tweet['text']);
$tweet_text= utf8_encode($tweet_parsetext['text']);
$tweet_shorturl= $tweet_parsetext['short_url'];
$tweet_parsedt= parse_tweetdatetime($tweet['created_at']);
$tweet_datetime= $tweet_parsedt['datetime'];
$tweet_dayofweek= $tweet_parsedt['dayofweek'];
$tweet_GMT= $tweet_parsedt['GMT'];
//Insert the tweet into the database:
$fields = array(
'id_tweet' => $tweet_id,
'text_tweet' => $tweet_text,
'datetime_tweet' => $tweet_datetime,
'dayofweek_tweet' => $tweet_dayofweek,
'GMT_tweet' => $tweet_GMT,
'shorturl_tweet' => $tweet_shorturl
);
$new_id= mysql_insert('tweets', $fields);
}
} //end of foreach
?>
트윗 저장 기능:
function mysql_insert($table, $inserts) {
$keys = array_keys($inserts);
exec_query("START TRANSACTION;");
$query= 'INSERT INTO `'.$table.'` (`'.implode('`,`', $keys).'`) VALUES (\''.implode('\',\'', $inserts).'\')';
exec_query($query);
$id= mysql_insert_id();
if (mysql_error()) {
exec_query("ROLLBACK;");
die("Error: $query");
}
else {
exec_query("COMMIT;");
}
return $id;
}
언급URL : https://stackoverflow.com/questions/12916539/simplest-php-example-for-retrieving-user-timeline-with-twitter-api-version-1-1
'programing' 카테고리의 다른 글
AWS SDK for PHP: 인스턴스 프로파일 메타데이터 서버에서 자격 증명을 검색하는 동안 오류가 발생했습니다. (0) | 2022.09.24 |
---|---|
문자 집합과 대조는 정확히 무엇을 의미합니까? (0) | 2022.09.24 |
URI를 의도에 전달하려면 어떻게 해야 합니까? (0) | 2022.09.21 |
Javascript에서 숫자를 반올림하려면 어떻게 해야 하나요? (0) | 2022.09.21 |
SQLite 대신 MySQL을 사용하여 새 Ruby on Rails 응용 프로그램 만들기 (0) | 2022.09.21 |