这篇文章主要围绕使用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爬取数据)
- 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进行接口,以返回页面的链接,该页面为我提供了用于请求访问令牌的密码。如此处详述: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令牌?
>在我的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)获取用户详细信息
不能执行它,甚至试图通过认证数据
像消费者密钥,消费者密钥,令牌,但结果是一样的.
我能够登录和接收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.
- 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用户名和密码来验证您的请求.
- 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
Hashtag
,to get thescreen_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 – 错误:无法在会话中找到请求令牌
要知道他们点击的按钮,我将网址存储在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
根据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等更多相关知识的信息可以在本站进行查询。
本文标签: