我正在開發一個PHP項目,我希望能夠自動將內容發佈到twitter。從php更新twitter狀態
從我的PHP程序中,我已經授權我的twitter應用程序,並將oauth_token和驗證程序存儲在mysql數據庫中。
當用戶提交表單時,應該將數據發佈到twitter。要做到這一點,我從數據庫中檢索的oauth_token發佈的消息,但是當我看到的代碼,不會實際狀態更新該條之前的迴應,我得到一個錯誤說
「無效/過期的標記」
下面是我使用
function postToTwitter($twitterMsg)
{
require ("../../social/phpHandler/twitterLib/EpiCurl.php");
require ("../../social/phpHandler/twitterLib/EpiOAuth.php");
require ("../../social/phpHandler/twitterLib/EpiTwitter.php");
require ("../../social/phpHandler/twitterLib/secret.php");
$query = "SELECT * FROM social_sites";
$result = mysql_query($query);
if ($result)
{
//session_start();
//$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
while ($myrow = mysql_fetch_array($result))
{
$oauth_token = $myrow['token'];
$verifier = $myrow['verifier'];
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
$twitterObj->setToken($oauth_token);
//echo 'OAuth Token: ' . $_GET['oauth_token'];
$token = $twitterObj->getAccessToken();
$twitterObj->setToken($token->oauth_token, $token->oauth_token_secret);
$_SESSION['ot'] = $token->oauth_token;
$_SESSION['ots'] = $token->oauth_token_secret;
$twitterInfo= $twitterObj->get_accountVerify_credentials();
$twitterInfo->response;
//echo '<pre>';
print_r($twitterInfo->response);
}
}
的代碼,我不知道爲什麼,這是行不通的,任何幫助將不勝感激。
感謝
UPDATE我出口的$ twitterInfo變量,並將其寫入文件和輸出如下。不知道這是否有幫助。
EpiTwitterJson :: __ set_state(陣列( 'RESP'=>
EpiCurlManager :: __ set_state(陣列( '鍵'=> '資源ID#12', 'epiCurl'=> EpiCurl :: __set_state(陣列( 'MC'=> NULL, '封郵件'=> NULL, '運行'=> NULL, '請求'=> 陣列( '資源ID#11'=> NULL, '資源ID#12'=> NULL, ), '響應'=> array( '資源ID#11'=> 陣列( '數據'=> '無效/過期令牌
/OAuth的/的access_token', '代碼'=> 401, '時間'=> 0.39, 「長度'=> 136, 'type'=>'text/html;數據'=>'{「錯誤」:「無效的\ /過期的令牌」,「請求」:「\ /帳戶(字符集= utf-8', ), '資源ID#12'=> array( 'data'=> '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''','''''>' , ) ) '屬性'=> 陣列( '代碼'=> 2097154, '時間'=> 3145731, '長度'=> 3145743, '類型'=> 1048594, ) , )),)),'responseText'=>'{「error」 :「無效\ /過期的令牌」,「請求」:「\/account \ /verify_credentials.json」}',
'response'=> array( 'error'=>'Invalid/expired Token', ' request'=>'/account/verify_credentials.json',),'error'=>'無效/過期令牌','request'=>'/ account/verify_credentials。JSON」,))
UPDATE 2 我已經嘗試通過串行化對象保存訪問令牌和後面使用下面
function authenticate($consumer_key, $consumer_secret)
{
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
$twitterObj->setToken($_GET['oauth_token']);
//echo 'OAuth Token: ' . $_GET['oauth_token'];
$token = $twitterObj->getAccessToken();
$twitterObj->setToken($token->oauth_token, $token->oauth_token_secret);
$_SESSION['ot'] = $token->oauth_token;
$_SESSION['ots'] = $token->oauth_token_secret;
$twitterInfo= $twitterObj->get_accountVerify_credentials();
$twitterInfo->response;
//echo '<pre>';
//print_r($twitterInfo->response);
//var_dump($twitterInfo);
$username = $twitterInfo->screen_name;
$profilePic = $twitterInfo->profile_image_url;
addToDatabase($username, $profilePic, $_GET['oauth_token'], $_GET['oauth_verifier']);
}
function addToDatabase($username, $profilePic, $token, $verifier)
{
$token_serialised = serialize($token);
$query = "INSERT INTO social_sites (social_name, token, verifier, username, profilePicture) VALUES ('Twitter', '$token_serialised', '$verifier', "
. "'$username', '$profilePic')";
然後代碼將其存儲在數據庫中,我'試圖張貼到Twitter沒有它必須重新加載Twitter應用程序授權頁面從我以前保存的數據庫中獲取值,並使用以下代碼將其解序後發佈到twitter:
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
while ($myrow = mysql_fetch_array($result))
{
//$access_token = unserialize($myrow['token']);
//$twitterObj->setToken($access_token);
//$token = $twitterObj->getAccessToken();
$token = unserialize($myrow['token']);
$twitterObj->setToken($token->oauth_token, $token->oauth_token_secret);
$_SESSION['ot'] = $token->oauth_token;
$_SESSION['ots'] = $token->oauth_token_secret;
$twitterInfo= $twitterObj->get_accountVerify_credentials();
$myFile = "log.txt";
$fh = fopen($myFile, 'w') or die("Error");
fwrite($fh, var_export($twitterInfo->response, true));
fclose($fh);
// $twitterMsg = $_REQUEST['tweet'];
$update_status = $twitterObj->post_statusesUpdate(array('status' => $twitterMsg));
$tem = $update_status->response;
fwrite($fh, var_export($tem, true));
fclose($fh);
}
日誌文件的寫入是在寫出Twitter響應的地方,它指出令牌無效或過期。
更新3 我也注意到,它有它的時候它unserializes陳述
Notice: unserialize(); error at offset 2555 of 2987 bytes
和PHP錯誤出現,當我嘗試導出它似乎是變量空
是否有任何異常或錯誤進入錯誤日誌? – 2012-02-22 23:45:29
不,知道錯誤被拋出,據我所知,只有twitter響應失敗 – Boardy 2012-02-23 18:57:58
@Boardy你確定你試圖發佈的Twitter帳戶仍然有這個應用程序授權嗎?我以前見過這個,那是在這種情況下的原因。 – BenOfTheNorth 2012-02-24 23:27:10