1

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::GET の代わりに QOAuth::POST を使用しても同じ結果が得られます

QOAuth を使用してアクセス トークンを取得するにはどうすればよいですか?

4

1 に答える 1

2

私は自分の問題を解決することができたので、ここに解決策を投稿します:

実際のところ、https://api.twitter.com/oauth/access_token へのアクセスを許可するには、ユーザーがhttps://api.twitter.com/oauth/authenticateで取得できるピンが必要です。

ただし、 https: //api.twitter.com/oauth/request_token で一時トークンを要求するときに oauth_callback=oob を設定した場合にのみ、この PIN を取得できます。

最終的に次のコードになりました:

    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();
    }
于 2012-07-11T15:50:13.557 に答える