从php更新twitter状态

从php更新twitter状态,php,twitter,oauth,Php,Twitter,Oauth,我正在从事一个PHP项目,我希望能够将内容自动发布到twitter上 通过我的PHP程序,我授权了我的twitter应用程序,并将oauth_令牌和验证器存储在mysql数据库中 当用户提交表单时,应该将数据发布到twitter上。为此,我正在从数据库中检索oauth_令牌以发布消息,但是当我在执行实际状态更新的代码部分之前查看响应时,我得到一个错误消息 “无效/过期令牌” 下面是我正在使用的代码 function postToTwitter($twitterMsg) { req

我正在从事一个PHP项目,我希望能够将内容自动发布到twitter上

通过我的PHP程序,我授权了我的twitter应用程序,并将oauth_令牌和验证器存储在mysql数据库中

当用户提交表单时,应该将数据发布到twitter上。为此,我正在从数据库中检索oauth_令牌以发布消息,但是当我在执行实际状态更新的代码部分之前查看响应时,我得到一个错误消息

“无效/过期令牌”

下面是我正在使用的代码

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;