从php更新twitter状态
我正在从事一个PHP项目,我希望能够将内容自动发布到twitter上 通过我的PHP程序,我授权了我的twitter应用程序,并将oauth_令牌和验证器存储在mysql数据库中 当用户提交表单时,应该将数据发布到twitter上。为此,我正在从数据库中检索oauth_令牌以发布消息,但是当我在执行实际状态更新的代码部分之前查看响应时,我得到一个错误消息 “无效/过期令牌” 下面是我正在使用的代码从php更新twitter状态,php,twitter,oauth,Php,Twitter,Oauth,我正在从事一个PHP项目,我希望能够将内容自动发布到twitter上 通过我的PHP程序,我授权了我的twitter应用程序,并将oauth_令牌和验证器存储在mysql数据库中 当用户提交表单时,应该将数据发布到twitter上。为此,我正在从数据库中检索oauth_令牌以发布消息,但是当我在执行实际状态更新的代码部分之前查看响应时,我得到一个错误消息 “无效/过期令牌” 下面是我正在使用的代码 function postToTwitter($twitterMsg) { req
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);
}
}
稍后,我将尝试在不必重新加载twitter应用程序授权页面的情况下发布到twitter,方法是从我先前保存的数据库中获取值,并使用以下代码将其取消序列化以发布到twitter:
$oauth_token = $_GET['oauth_token'];
if($oauth_token == '')
{
$url = $twitterObj->getAuthorizationUrl();
header("Location: $url");
}else{
$twitterObj->setToken($_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();
}
日志文件写入是指写入twitter响应,其中声明令牌无效或过期
更新3
我还注意到,当它取消序列化时,会出现一个php错误
注意:取消序列化();2987字节的偏移量2555处出错
当我尝试导出变量时,它似乎是空的我的建议:
1) 使用像这样的PHP库
2) 在上选择您的应用程序并单击“我的访问令牌”
3) 请按照中的说明使用该访问令牌
请参阅更多:
您如何在数据库中存储oauth_令牌 不能简单地将其存储为字符串,因为它是一个对象。相反,您需要在将其写入数据库之前对其进行序列化,并在从数据库检索时取消序列化
您应该创建twitter应用程序。下载并连接EpiWitterAPI。复制twitter应用程序密钥和密码(应用程序内设置)使用它们初始化twiiter对象
$twitterObj->setToken($_SESSION['ot'], $_SESSION['ots']);
$update_status = $twitterObj->post_statusesUpdate(array('status' => $tweet_msg));
$temp = $update_status->response;
然后检查twitter是否已经向您的页面发送令牌
如果twitter token=''您的页面向twitter发出请求,并使用token获取响应(响应指向您在twitter应用程序设置-重定向字段中键入的地址),当您拥有它时,您可以更改您的状态,如下所示:
在将数据插入MySQL之前,必须对其进行转义。您可以使用PHP内置函数
编辑:您应该使用库与服务器(Twitter和其他)进行通信。我已经写了一个简单的,你可以阅读更多关于它在。它支持Twitter、Facebook和Google。是否有任何异常或错误进入您的错误日志?不,我知道,据我所知,只有Twitter响应才会抛出错误failing@Boardy您确定您尝试发布到的twitter帐户仍然授权了此应用程序吗?我以前见过这种情况,这就是造成这种情况的原因。@Bengrifiths,是的,它被授权了,但仍然可以在twitter帐户的应用程序设置中看到它。这种方式不意味着用户必须始终从twitter页面授权应用程序吗。我想这样做,用户可以添加一个twitter帐户到我的php程序中,当他们在任何时候提交表单时,它会自动授权并发布twitter更新。这不可能吗?我正在用mediumtext数据字段将oauth令牌存储在mysql数据库中。我猜这可能就是问题所在。oauth令牌是twitter在授权后重定向给您的URL参数吗?这是其他原因吗?因为这是我用于oauth令牌的原因oauth_令牌是一个对象,所以您必须在将其放入数据库之前对其进行序列化感谢这确实有效,我希望我也能接受你的回答@lamplightdev,因为你们都解决了这个问题。
$twitterObj = new EpiTwitter($context["TWITTER"]["APP_KEY"], $context["TWITTER"]["APP_SECRET"]);
$oauth_token = $_GET['oauth_token'];
if($oauth_token == '')
{
$url = $twitterObj->getAuthorizationUrl();
header("Location: $url");
}else{
$twitterObj->setToken($_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();
}
$twitterObj->setToken($_SESSION['ot'], $_SESSION['ots']);
$update_status = $twitterObj->post_statusesUpdate(array('status' => $tweet_msg));
$temp = $update_status->response;