Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt TwitterAPI的QOauth::接口_Qt_Oauth_Twitter_Twitter Oauth - Fatal编程技术网

Qt TwitterAPI的QOauth::接口

Qt TwitterAPI的QOauth::接口,qt,oauth,twitter,twitter-oauth,Qt,Oauth,Twitter,Twitter Oauth,我正在尝试使用QOAuth对twitter的API进行身份验证 我目前的代码是: oauthInterface->setConsumerKey(CONSUMER_KEY); oauthInterface->setConsumerSecret(CONSUMER_SECRET_KEY); oauthInterface->setRequestTimeout(10000); QOAuth::ParamMap reply = oauthInterface->requestToke

我正在尝试使用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();
}`
使用QOAuth::POST而不是QOAuth::GET可以得到相同的结果


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

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

事实上,为了获得访问权限,您需要一个pin,用户可以在

Hewever只有在请求临时令牌时设置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();
    }
oauthInterface->setConsumerKey(消费者密钥);
OAuthiInterface->SetConsumerCret(消费者密钥);
oauthInterface->setRequestTimeout(10000);
QOAuth::ParamMap参数;
插入(“oauth_回调”、“oob”);
QOAuth::ParamMap reply=OAuthiInterface->requestToken(“https://api.twitter.com/oauth/request_token,QOAuth::POST,QOAuth::HMAC_SHA1,args);
如果(oauthInterface->error()==QOAuth::NoError)
{
token=reply.value(QOAuth::tokenParameterName());
tokenSecret=reply.value(QOAuth::tokenSecretParameterName());

qDebug()对于中间请求,它可能是,而不是。这取决于您的应用程序,正确的URL写在Twitter Developer的应用程序设置中。两者都被接受,只是做了不同的事情。人们应该参考Twitter的api。如果一个用户可以打开多个帐户,请使用authorize
    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();
    }