QOauth :: Twitter API接口

时间:2012-07-11 14:47:21

标签: qt oauth twitter twitter-oauth

我正在尝试使用QOAuth对twitter的API进行身份验证。

我的代码目前是:

oauthInterface->setConsumerKey(CONSUMER_KEY);
oauthInterface->setConsumerSecret(CONSUMER_SECRET_KEY);
oauthInterface->setRequestTimeout(10000);

QOAuth::ParamMap reply = oauthInterface->requestToken("https://api.twitter.com/oauth/request_token", QOAuth::GET, QOAuth::HMAC_SHA1);

if(oauthInterface->error() == QOAuth::NoError)
{
    token = reply.value(QOAuth::tokenParameterName());
    tokenSecret = reply.value(QOAuth::tokenSecretParameterName());

    qDebug() << "temporary token" << token << tokenSecret;
}

reply = oauthInterface->accessToken("https://api.twitter.com/oauth/access_token",QOAuth::GET, token, tokenSecret, QOAuth::HMAC_SHA1);

if(oauthInterface->error() == QOAuth::NoError)
{
    qDebug() << "final token" << reply.value("screen_name") << reply.value(QOAuth::tokenParameterName()) << reply.value(QOAuth::tokenSecretParameterName());
}
else
{
    qDebug() << "ERROR" << oauthInterface->error();
}`

并给我

temporary token "cBhxmmdkYgmghyy02kmfc0VSIuykRCNoQRh2h1r3Yg" "oYF8b2lzPSgDTRku8X4BjjnoVw5dAXXZBXc2R9P8Jk" 
ERROR 401

使用QOAuth :: POST代替QOAuth :: GET我有相同的结果

我如何使用QOAuth获取访问令牌?

1 个答案:

答案 0 :(得分:2)

当我设法解决我自己的问题时,我在这里发布解决方案:

事实是,对于授予访问权限https://api.twitter.com/oauth/access_token的权限,您需要一个可由用户在https://api.twitter.com/oauth/authenticate

获取的引脚

如果你在https://api.twitter.com/oauth/request_token要求临时代币时设置oauth_callback = oob,那么你只能得到这个引脚

我最终得到了以下代码:

    oauthInterface->setConsumerKey(CONSUMER_KEY);
    oauthInterface->setConsumerSecret(CONSUMER_SECRET_KEY);
    oauthInterface->setRequestTimeout(10000);

    QOAuth::ParamMap args;
        args.insert("oauth_callback", "oob");
    QOAuth::ParamMap reply = oauthInterface->requestToken("https://api.twitter.com/oauth/request_token", QOAuth::POST, QOAuth::HMAC_SHA1, args);

    if(oauthInterface->error() == QOAuth::NoError)
    {
        token = reply.value(QOAuth::tokenParameterName());
        tokenSecret = reply.value(QOAuth::tokenSecretParameterName());

        qDebug() << "temporary token" << token << tokenSecret;
    }

    QString url = "https://api.twitter.com/oauth/authenticate";
    url.append("?");
    url.append(QOAuth::tokenParameterName() + "=" + token);
    QDesktopServices::openUrl(QUrl(url));


    QOAuth::ParamMap args2;
    QString pin = QInputDialog::getText(this, "Pin", "Enter pin");
    args2.insert("oauth_verifier", pin.toAscii()); //pin.toAscii());
    reply = oauthInterface->accessToken("https://api.twitter.com/oauth/access_token", QOAuth::GET, token, tokenSecret, QOAuth::HMAC_SHA1, args2);


    if(oauthInterface->error() == QOAuth::NoError)
    {
        qDebug() << "final token" << reply.value("screen_name") << reply.value(QOAuth::tokenParameterName()) << reply.value(QOAuth::tokenSecretParameterName());
    }
    else
    {
        qDebug() << "ERROR" << oauthInterface->error();
    }