GVKun编程网logo

使用Python 3从Twitter API检索请求令牌(python在twitter爬取数据)

29

这篇文章主要围绕使用Python3从TwitterAPI检索请求令牌和python在twitter爬取数据展开,旨在为您提供一份详细的参考资料。我们将全面介绍使用Python3从TwitterAPI检

这篇文章主要围绕使用Python 3从Twitter API检索请求令牌python在twitter爬取数据展开,旨在为您提供一份详细的参考资料。我们将全面介绍使用Python 3从Twitter API检索请求令牌的优缺点,解答python在twitter爬取数据的相关问题,同时也会为您带来Cookie – 如何检索twitter oauth令牌?、iphone – 如何使用twitter api v1.1(Twitter错误215)获取用户详细信息、node.js – Passport-Twitter – 错误:无法在会话中找到请求令牌、node.js – 从Twitter oAuth API请求令牌时出错215的实用方法。

本文目录一览:

使用Python 3从Twitter API检索请求令牌(python在twitter爬取数据)

使用Python 3从Twitter API检索请求令牌(python在twitter爬取数据)

我正在尝试使用Python 3与Twitter
API进行接口,以返回页面的链接,该页面为我提供了用于请求访问令牌的密码。如此处详述:https : //dev.twitter.com/docs/auth/pin-based-
authorization

Twitter的API响应我,告诉我我没有通过返回401来正确授权我的POST请求。关于我为什么未正确编码base64中的HMAC签名,我是最好的猜测。根据我查看的正确POST请求的样本,我生成的POST请求的其他所有部分均显示为正确。

我花了几天的时间进行这项工作,希望有人可以帮助我超越最后一部分。

这是Twitter
API文档中最相关的部分:https
:
//dev.twitter.com/docs/api/1/post/oauth/request_token

https://dev.twitter.com/docs/auth/authorizing-
request

这是我正在使用的代码:

import urllib.parse,urllib.request,json
from hashlib import sha1
import hmac
import binascii
import time
import random
import sys

#Server Links
REQUEST_URL = "https://api.twitter.com/oauth/request_token";
ACCESS_URL = "https://api.twitter.com/oauth/access_token";
AUTHORIZE_URL = "https://api.twitter.com/oauth/authorize";

#Consumer keys
TOKEN = "Omitted"
TOKEN_SECRET = "Omitted"

#Access keys
ACCESS_TOKEN = ""
ACCESS_TOKEN_SECRET = ""

TWEET = ""

count = 1

while len(sys.argv) > count:
    TWEET += sys.argv[count] + " "
    count += 1

TWEET = TWEET[:-1] #Get rid of trailing space

print(TWEET + "\n")

#Build content header for POST to return request tokens

HEADER_TITLE = "Authorization:"

#Consumer key
HEADER = 'OAuth oauth_callback="oob" oauth_consumer_key="' + TOKEN + '",'

#Nonce
HEADER += 'oauth_nonce="'
NONCE = ""
for i in range(32):
    NONCE += chr(random.randint(97,122))
HEADER += NONCE
HEADER += '",'

#Timestamp
TIMESTAMP = str(int(time.time()))

#Signature
HEADER += 'oauth_signature="'
PARAMETER_STRING = "include_entities=true&oauth_consumer_key=" + TOKEN + "&oauth_nonce=" + NONCE + "&oauth_signature_method=HMAC-SHA1&oauth_timestamp=" + TIMESTAMP + "&oauth_version=1.0"
BASE_STRING = 'POST&' + urllib.parse.quote(REQUEST_URL,'') + '&' + urllib.parse.quote(PARAMETER_STRING,'')
SIGNING_KEY = urllib.parse.quote(TOKEN_SECRET,'') + '&'
print("DEBUG : SIGNING KEY " + SIGNING_KEY + " BASE STRING " + BASE_STRING + "\n")
HEADER += str(binascii.b2a_base64(hmac.new(BASE_STRING.encode(),SIGNING_KEY.encode(),sha1).digest()[:-1]))#Note to self,we may not want to remove the last character...
HEADER += '",'

#Signature Method
HEADER += 'oauth_signature_method="HMAC-SHA1",'

#Timestamp
HEADER += 'oauth_timestamp="' + TIMESTAMP + '",'

#Version
HEADER += 'oauth_version="1.0"'

print(HEADER_TITLE + "\n" + HEADER)

print(urllib.request.urlopen(urllib.request.Request(REQUEST_URL,bytes(HEADER_TITLE+HEADER,'utf-8'))).read())

最后,我想指出,我知道存在有助于开发的Python OAuth和Twitter模块。但是,作为学习经验,我选择不使用它们。

非常感谢您的时间和协助。

Cookie – 如何检索twitter oauth令牌?

我正在编写一个使用twitter作为主要登录方法的网络应用程序。我已经编写了从Twitter获取oauth令牌的代码。我现在的计划是

>在我的Users表中查找使用令牌检索的twitter用户名的条目,如有必要,创建条目
>使用新的OAuth令牌更新Users.TwitterOAuthToken列
>在站点上创建一个带有随机guid的永久cookie,并将记录插入到我的UserCookies表中,该表与Cookie匹配
>当请求进来时,我将在UserCookies表中查找浏览器cookie id,然后使用它来找出用户,并代表他们发出Twitter请求
>将oauth标记写入一些页面作为js变量,以便javascript可以代表用户进行请求
>如果用户清除他/她的cookies,用户将不得不再次登录到twitter

这是正确的过程吗?我有没有创建任何庞大的安全漏洞?

解决方法

听起来不错。

但是,我建议不要使用Twitter用户名作为用户表的主索引。由于Twitter用户名可以更改。我学到了这个难题。

您应该使用Twitter User ID(big int)作为主要索引,因为如果用户更改其用户名,则不会改变。

至于令牌的自我,你可以存储它以备将来使用。事实上,鼓励你这样做。

iphone – 如何使用twitter api v1.1(Twitter错误215)获取用户详细信息

iphone – 如何使用twitter api v1.1(Twitter错误215)获取用户详细信息

我使用twitter提供的twitter api来获取详细信息
不能执行它,甚至试图通过认证数据
像消费者密钥,消费者密钥,令牌,但结果是一样的.
我能够登录和接收twitter身份验证令牌,但无法获取用户详细信息.
以下代码由我使用(我正在使用MGtwitter引擎):

NSMutableuRLRequest *request =[[NSMutableuRLRequest alloc]initWithURL:[NSURL URLWithString:[Nsstring stringWithFormat:@"https://api.twitter.com/1.1/users/show.json?screen_name=%@",username]]];

NSData *returnData = [ NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil ];

Nsstring *returnString = [[Nsstring alloc]initWithData:returnData encoding:NSUTF8StringEncoding];
    NSError *err = nil;

twitterLogin = [NSJSONSerialization JSONObjectWithData:[returnString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&err];

错误如下所示:

errors = (
{
    code = 215;
    message = "Bad Authentication data";
} );

解决方法

首先,您需要验证您的请求(获取权限).

第二,请参阅以下步骤:

下载FHSTwitterEngine Twitter图书馆.

2.将文件夹“FHSTwitterEngine”添加到您的项目中,然后添加#import“FHSTwitterEngine.h”.

3.将SystemConfiguration.framework添加到您的项目中.

Usage : 1.in the [ViewDidLoad] add the following code.

UIButton *logIn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    logIn.frame = CGRectMake(100,100,100);
    [logIn setTitle:@"Login" forState:UIControlStatenormal];
    [logIn addTarget:self action:@selector(showLoginWindow:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:logIn];

[[FHSTwitterEngine sharedEngine]permanentlySetConsumerKey:@"<consumer_key>" andSecret:@"<consumer_secret>"];
    [[FHSTwitterEngine sharedEngine]setDelegate:self];

并且不要忘记导入代理FHSTwitterEngineAccesstokenDelegate.

  1. you need to get the permission for your request,with the following method which will present Login window:
- (void)showLoginWindow:(id)sender {
    [[FHSTwitterEngine sharedEngine]showOAuthLoginControllerFromViewController:self withCompletion:^(BOOL success) {
        NSLog(success?@"L0L success":@"O noes!!! Loggen faylur!!!");
    }];
}

当登录窗口出现时,输入您的Twitter用户名和密码来验证您的请求.

  1. add the following methods to your code:
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [[FHSTwitterEngine sharedEngine]loadAccesstoken];
    Nsstring *username = [[FHSTwitterEngine sharedEngine]loggedInUsername];// self.engine.loggedInUsername;
    if (username.length > 0) {
        lbl.text = [Nsstring stringWithFormat:@"Logged in as %@",username];
        [self listResults];


    } else {
        lbl.text = @"You are not logged in.";
    }

}
- (void)storeAccesstoken:(Nsstring *)accesstoken {
    [[NSUserDefaults standardUserDefaults]setobject:accesstoken forKey:@"SavedAccessHTTPBody"];
}

- (Nsstring *)loadAccesstoken {
    return [[NSUserDefaults standardUserDefaults]objectForKey:@"SavedAccessHTTPBody"];
}

4.Now you are ready to get your request,with the following method(in this method I created a Twitter search for some Hashtag,to get the screen_name for example):

- (void)listResults {

    dispatch_async(GCDBackgroundThread,^{
        @autoreleasepool {
            [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

        // the following line contains a FHSTwitterEngine method wich do the search.

            dict = [[FHSTwitterEngine sharedEngine]searchTweetsWithQuery:@"#iOS" count:100 resultType:FHSTwitterEngineResultTypeRecent unil:nil sinceID:nil maxID:nil];
          // NSLog(@"%@",dict);
            NSArray *results = [dict objectForKey:@"statuses"];

          //  NSLog(@"array text = %@",results);
            for (NSDictionary *item in results) {
                NSLog(@"text == %@",[item objectForKey:@"text"]);
                NSLog(@"name == %@",[[item objectForKey:@"user"]objectForKey:@"name"]);
                NSLog(@"screen name == %@",[[item objectForKey:@"user"]objectForKey:@"screen_name"]);
                NSLog(@"pic == %@",[[item objectForKey:@"user"]objectForKey:@"profile_image_url_https"]);
            }

            dispatch_sync(GCDMainThread,^{
                @autoreleasepool {
                    UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"Complete!" message:@"Your list of followers has been fetched" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                    [av show];
                    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
                }
            });
        }
    });
}

就这样.
我从搜索查询中获取了screen_name,您可以使用以下方法获取用户的时间轴:

// statuses/user_timeline
- (id)getTimelineForUser:(Nsstring *)user isID:(BOOL)isID count:(int)count;
- (id)getTimelineForUser:(Nsstring *)user isID:(BOOL)isID count:(int)count sinceID:(Nsstring *)sinceID maxID:(Nsstring *)maxID;

而不是上面的搜索方法.

注意:请参阅FHSTwitterEngine.h以了解需要使用的方法.
注意:获取< consumer_key>和< consumer_secret>您需要访问这个link 在Twitter上注册您的应用程序.

node.js – Passport-Twitter – 错误:无法在会话中找到请求令牌

node.js – Passport-Twitter – 错误:无法在会话中找到请求令牌

我使用passport-twitter在我的网站上建立了一个twitter连接.用户可以通过单击“登录”或“添加新项目”进行连接. 2之间的唯一区别是,如果他们点击添加新项目,则一旦他们登录就会打开模态窗口.

要知道他们点击的按钮,我将网址存储在req.session.referrer中:

// route for twitter authentication and login
app.get('/auth/twitter',function(req,res,next){
    req.session.referrer = req.url;
    console.log(req.session);
    passport.authenticate('twitter')(req,next);
});

app.get('/auth/twitter/new',next);
});

// handle the callback after twitter has authenticated the user
app.get('/auth/twitter/callback',next){
    var options = {
            successRedirect : '/twitter-user/signin',failureRedirect : '/'
        };

    console.log(req.session);
    if (req.session.referrer && req.session.referrer.indexOf('new') > -1) options.successRedirect = '/twitter-user/new';

    passport.authenticate('twitter',options)(req,next)
});

在我的开发环境中一切正常,但一旦在线,我收到此错误消息:
表达

500 Error: Failed to find request token in session
at Strategy.OAuthStrategy.authenticate (/app/node_modules/passport-twitter/node_modules/passport-oauth1/lib/strategy.js:142:54)
...

我的设置在Twitter中正确设置.这是我得到的日志:
对于请求:

{ cookie: 
  { path: '/',_expires: null,originalMaxAge: null,httpOnly: true },passport: {},referrer: '/auth/twitter' }

对于回调:

{ cookie: 
    { path: '/',passport: {} }

也许这可能是由于子域问题(http://example.com vs http://www.example.com),因为我本地没有pb.
我怎样才能解决这个问题?

非常感谢

编辑:我的API密钥设置如下(根据本教程:http://scotch.io/tutorials/javascript/easy-node-authentication-twitter):

passport.use(new TwitterStrategy({

    consumerKey     : configAuth.twitterauth.consumerKey,consumerSecret  : configAuth.twitterauth.consumerSecret,callbackURL     : configAuth.twitterauth.callbackURL

},function(token,tokenSecret,profile,done) {
    ...
    });

解决方法

我得到了相同的错误,但解决了..这就是我的问题和解决方案.

现状,它不喜欢我的重定向网址“http:// localhost / auth / twitter / callback”.我将其更改为“http:// 127.0.0.1 / auth / twitter / callback”.在我的实际代码中,我不得不将其保留为localhost,否则我会收到有关丢失令牌的错误

node.js – 从Twitter oAuth API请求令牌时出错215

node.js – 从Twitter oAuth API请求令牌时出错215

我正在尝试在我的NodeJS应用程序中实现Twitter登录.

根据Twitter的documentation,我需要通过POST请求将以下参数传递给此URL.
网址:

https://api.twitter.com/oauth/request_token

参数:

oauth_nonce=,oauth_signature=,oauth_callback="http%3A%2F%2Fmyapp.com%3A3005%2Ftwitter%2Fprocess_callback",oauth_signature_method="HMAC-SHA1",oauth_timestamp="currentTimestamp",oauth_consumer_key=“myKEY”,oauth_version="1.0"

我正在为oauth_nonce参数传递一个随机字符串.我不清楚如何创建oauth_signature?

每当我发出POST请求时,我都会收到215错误,因为我猜错了oauth_nonce和oauth_signature值.

如何在NodeJS中发出请求时生成oauth_nonce和oauth_signature值.

解决方法

这些参数需要在您的授权标头中传递:

OAuth oauth_nonce="K7ny27JTpKVsTgdyLdDfmQQWVLERj2zAK5Bslrsqyw",oauth_timestamp="1300228849",oauth_consumer_key="OqEqJeafRSF11jBMStrZz",oauth_signature="Pc%2BMLdv028fxCErFyi8KXFM%2BddU%3D",oauth_version="1.0"

但在此之前,您需要获得一个签名,然后将为您提供上述所有参数.检查the documentation here.

建议使用像passport这样的第三方库,如果需要,可以大大简化此过程.

今天关于使用Python 3从Twitter API检索请求令牌python在twitter爬取数据的介绍到此结束,谢谢您的阅读,有关Cookie – 如何检索twitter oauth令牌?、iphone – 如何使用twitter api v1.1(Twitter错误215)获取用户详细信息、node.js – Passport-Twitter – 错误:无法在会话中找到请求令牌、node.js – 从Twitter oAuth API请求令牌时出错215等更多相关知识的信息可以在本站进行查询。

本文标签: