我正在开发一个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