
网站调用新浪微博内容
网站调用新浪微博内容(一下怎么模拟登陆新浪微博(图)怎么获取微博数据)
网站优化 • 优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2022-04-06 18:16
最近需要爬取微博数据进行分析。对于新浪微博,官方提供了API,但是有几个致命的限制(调用次数和授权期限的限制),所以我觉得有必要研究爬虫,直接爬取。通过微博获取微博数据的可行性。
由于模拟登陆微博是爬虫抓取微博信息的第一步,下面介绍如何模拟登陆微博(以新浪微博为例)。
这个过程主要分为两个步骤:
1 脚本模拟登陆新浪微博并保存cookies;
2 获得cookie信息后,使用cookie信息直接访问微博url。
其中,第一步是这里讨论的重点。为了更好的模拟这一步,需要一个好的网络监控工具,可以使用火狐的Firebug和Chrome以及IE自带的开发工具(注意IE必须是IE9以上才有监控网络的功能,Chrome的网络交互消息可以在网络部分查看)。另外前两天发现python支持的包很多,用python自定义自己的网络包比较方便,所以这里我用python作为我的开发语言。
好了,先说一下前提工作,下面开始分析用户在登录新浪微博的过程中进行的操作。在下面的例子中,我使用chrome自带的开发者工具作为我的网络包监控工具。
首先打开(如果你设置了浏览器自动记住密码自动登录,需要清除cookie),然后通过网络监控工具,我们会发现在用户登录过程中,浏览器交互与服务器三遍。它们如下:
一、第一个Get请求获取一些参数
在用户名栏输入你的微博账号,然后确认,这时你会发现当你的焦点离开用户名输入框时,浏览器会自动报"callback=sinaSSOController.preloginCallBack&su=&rsakt=mod& checkpin=1&client =ssologin.js (v1.4.5)&_=83” 发送GET请求,如下:
仔细看这个GET请求的响应内容,你会发现这个JSON字符串中收录了几个参数,可能你不知道它们的含义,但是没关系,现在你只需要知道这些参数会在后续处理。能。
二、发送 POST 请求
这部分是整个登录过程的重点。这部分用于向服务器提交用户信息,服务器会判断用户信息是否正确,从而判断登录是否成功。
通过 Chrome 自带的开发者工具,可以观察到 POST 消息的相关信息(url、headers、data)。下图是我的 POST 消息截图:
网址信息如下:
包头信息如下:
POST的消息数据信息如下:
接下来的工作就比较简单了,我们要做的就是模仿上面消息的内容和格式,用python发送类似的消息。在自己自定义类似的消息之前,我觉得有必要简单解释一下上面消息中DATA表单中每一项的含义。
其中,“su”为加密后的用户名,“sp”为加密后的密码。“servertime”、“nonce”和“rsakv”是上一个GET请求返回的JSON字符串的内容。其他参数不变。然后,重点讨论“su”和“sp”的加密算法。
1. "su" 加密算法
su 是 BASE64 计算出来的用户名: su= base64.encodestring( urllib.quote(username) )[:-1];
2. "sp" 加密算法
sp的加密算法可能会经常变化(考虑到网站的安全性,一段时间后登录消息的格式和加密算法发生变化是正常的),目前新浪使用的是RSA算法(如果你比较js 如果你是牛,可以直接去网页源码找它的加密方式,我没找到,参考网上有)。
这里简单介绍一下RSA算法的解密过程。
2.1 安装RSA模块,下载地址为:
2.2 创建一个 rsa 公钥。公钥的两个参数在新浪微博上都给定了固定值,但都是十六进制字符串。第一个是第一步登录的那个。pubkey,第二个是js加密文件中的'10001'。这两个值需要先从十六进制转换为十进制,但也可以在代码中硬编码。我直接写'10001'为65537
rsaPublickey=int(pubkey,16)
key=rsa.PublicKey(rsaPublickey,65537)#创建公钥
message=str(servertime)+'\t'+str(nonce)+'\n'+str(password)#拼接明文js加密文件得到
passwd=rsa.encrypt(message,key)#encryption
passwd=binascii.b2a_hex(passwd)#将加密信息转换为十六进制。
如果上述所有步骤对您来说都顺利,您将收到以下响应:
这是一个自动跳转语句,其中收录要跳转的URL。如果登录正确,则该URL中的德语retcode值为0。否则,登录错误。您需要仔细检查上述步骤。
三、跳转到对应的微博页面
我们已经得到了上面要重定向的 url,所以现在我们只需要请求这个 URL。这里要注意一点,为了让服务器知道你是否登录,这一步的请求需要使用上一步操作的cookie信息(因为第二步登录成功的信息会会自动记录在cookie中),所以我们在整个程序开始时,需要打开cookie,以保证cookie在以后的操作中可以正确使用。同时对于python用户,这一步不要自己自定义header,因为urllib2默认会自动打包cookie信息。如果手动自定义标头,则可能会丢失 cookie 信息。
下面附上我的参考代码:
参考文章:
1、
2、
从: 查看全部
网站调用新浪微博内容(一下怎么模拟登陆新浪微博(图)怎么获取微博数据)
最近需要爬取微博数据进行分析。对于新浪微博,官方提供了API,但是有几个致命的限制(调用次数和授权期限的限制),所以我觉得有必要研究爬虫,直接爬取。通过微博获取微博数据的可行性。
由于模拟登陆微博是爬虫抓取微博信息的第一步,下面介绍如何模拟登陆微博(以新浪微博为例)。
这个过程主要分为两个步骤:
1 脚本模拟登陆新浪微博并保存cookies;
2 获得cookie信息后,使用cookie信息直接访问微博url。
其中,第一步是这里讨论的重点。为了更好的模拟这一步,需要一个好的网络监控工具,可以使用火狐的Firebug和Chrome以及IE自带的开发工具(注意IE必须是IE9以上才有监控网络的功能,Chrome的网络交互消息可以在网络部分查看)。另外前两天发现python支持的包很多,用python自定义自己的网络包比较方便,所以这里我用python作为我的开发语言。
好了,先说一下前提工作,下面开始分析用户在登录新浪微博的过程中进行的操作。在下面的例子中,我使用chrome自带的开发者工具作为我的网络包监控工具。
首先打开(如果你设置了浏览器自动记住密码自动登录,需要清除cookie),然后通过网络监控工具,我们会发现在用户登录过程中,浏览器交互与服务器三遍。它们如下:
一、第一个Get请求获取一些参数
在用户名栏输入你的微博账号,然后确认,这时你会发现当你的焦点离开用户名输入框时,浏览器会自动报"callback=sinaSSOController.preloginCallBack&su=&rsakt=mod& checkpin=1&client =ssologin.js (v1.4.5)&_=83” 发送GET请求,如下:


仔细看这个GET请求的响应内容,你会发现这个JSON字符串中收录了几个参数,可能你不知道它们的含义,但是没关系,现在你只需要知道这些参数会在后续处理。能。
二、发送 POST 请求
这部分是整个登录过程的重点。这部分用于向服务器提交用户信息,服务器会判断用户信息是否正确,从而判断登录是否成功。
通过 Chrome 自带的开发者工具,可以观察到 POST 消息的相关信息(url、headers、data)。下图是我的 POST 消息截图:
网址信息如下:

包头信息如下:

POST的消息数据信息如下:

接下来的工作就比较简单了,我们要做的就是模仿上面消息的内容和格式,用python发送类似的消息。在自己自定义类似的消息之前,我觉得有必要简单解释一下上面消息中DATA表单中每一项的含义。
其中,“su”为加密后的用户名,“sp”为加密后的密码。“servertime”、“nonce”和“rsakv”是上一个GET请求返回的JSON字符串的内容。其他参数不变。然后,重点讨论“su”和“sp”的加密算法。
1. "su" 加密算法
su 是 BASE64 计算出来的用户名: su= base64.encodestring( urllib.quote(username) )[:-1];
2. "sp" 加密算法
sp的加密算法可能会经常变化(考虑到网站的安全性,一段时间后登录消息的格式和加密算法发生变化是正常的),目前新浪使用的是RSA算法(如果你比较js 如果你是牛,可以直接去网页源码找它的加密方式,我没找到,参考网上有)。
这里简单介绍一下RSA算法的解密过程。
2.1 安装RSA模块,下载地址为:
2.2 创建一个 rsa 公钥。公钥的两个参数在新浪微博上都给定了固定值,但都是十六进制字符串。第一个是第一步登录的那个。pubkey,第二个是js加密文件中的'10001'。这两个值需要先从十六进制转换为十进制,但也可以在代码中硬编码。我直接写'10001'为65537
rsaPublickey=int(pubkey,16)
key=rsa.PublicKey(rsaPublickey,65537)#创建公钥
message=str(servertime)+'\t'+str(nonce)+'\n'+str(password)#拼接明文js加密文件得到
passwd=rsa.encrypt(message,key)#encryption
passwd=binascii.b2a_hex(passwd)#将加密信息转换为十六进制。
如果上述所有步骤对您来说都顺利,您将收到以下响应:

这是一个自动跳转语句,其中收录要跳转的URL。如果登录正确,则该URL中的德语retcode值为0。否则,登录错误。您需要仔细检查上述步骤。
三、跳转到对应的微博页面
我们已经得到了上面要重定向的 url,所以现在我们只需要请求这个 URL。这里要注意一点,为了让服务器知道你是否登录,这一步的请求需要使用上一步操作的cookie信息(因为第二步登录成功的信息会会自动记录在cookie中),所以我们在整个程序开始时,需要打开cookie,以保证cookie在以后的操作中可以正确使用。同时对于python用户,这一步不要自己自定义header,因为urllib2默认会自动打包cookie信息。如果手动自定义标头,则可能会丢失 cookie 信息。
下面附上我的参考代码:
参考文章:
1、
2、
从:
网站调用新浪微博内容(Web2.0时代,新浪微博API官方的方式总是显得很麻烦)
网站优化 • 优采云 发表了文章 • 0 个评论 • 169 次浏览 • 2022-04-05 08:15
新浪微博的API官方提供了多种调用方式,支持编程,归根结底有两种:
1.基于 Oauth 协议,使用 Open API。(%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E)
2.使用微博JS-SDK( )。
官方的方式总是显得繁琐。让我们来探索一下,是否可以使用非官方的方法,在没有AppKey、身份验证和Ajax 的情况下,跨域调用新浪微博API?
在Web2.0时代,短链服务非常流行。新浪的短链服务域名是,这个域名真的很短,没办法变短。
打开新浪微博API官方文档,短链服务描述如下:
上面列出的方法调用都是相似的。我们以第一种方法 short_url/shorten 为例。打开详细说明:
我们来分析一下这一段:
1.需要登录:不。这很重要,因为我们不需要登录,我们的“免认证”就可以正常工作。
2.频率限制:是的。这也是很关键的,也就是说如果我们走官方的方式,调用的次数会非常有限。
3.支持的格式:JSON。事实上,根据实验,新浪微博不仅支持JSON,还支持JSONP,但文档并没有告诉我们。这也很关键。因为有JSONP,就意味着可以轻松跨域。
4.网址:. 事实上,这也是一个谎言。HTTPS 肯定会影响速度。经过实验,直接把HTTPS改成HTTP还是可以的。
接下来,一一突破难关。
一、使用JQuery+JSONP跨域。
参考文档:
jquery对JSONP非常友好,调用AJAX时只需指定dataType:jsonp即可。
二是频率限制问题。
由于不需要登录,因此可以绕过频率限制问题。因为 AppKey 本身是半公开的。我们可以轻松地 Google 到一堆很棒的应用程序的 Appkey。
例如:
iPhone新浪微博客户端App Key:5786724301
iPad新浪客户端App Key:2849184197
Google.Nexus Wave 客户端应用密钥:1206405345
周伯通微博经理App Key:202088835
微博应用密钥:211160679
上面列出的 AppKey 都是来自一些拥有大量用户的移动应用程序。它们的频率限制非常宽松,几乎可以理解为“无限制”。为了解决频率限制问题,我们可以使用他们的Appkey。
另外:新浪微博API的频次限制有两个维度,服务IP维度和用户IP维度。. 这与本文无关,因为 Javascript 在客户端运行。但是如果要修改本文中提到的方法,使用C#或其他高级语言在服务器端调用,一定要注意服务器IP维度。
三、一个简单的实验。
浏览器会显示
{"urls":[
{"result":true,"url_short":"http://t.cn/h5FGy","url_long":","type":0}
]}
通过访问上述的地址,您已经得到了的段地址:http://t.cn/h5FGy
注意我们使用的是http而非https,不需要使用https,上文已经提到了。
四、最终代码示例
最终代码的示例参考这里http://haotaoqu.com/item-45.html
这个示例将一个又臭又长的淘宝客URL地址转换为了新浪短地址。
Javascript代码如下:
五、除了short_url/shorten,其他可以用这个方法调用的API
任何标有“login required: no”的接口都可以通过本文的rogue方法调用。打开%E6%96%87%E6%A1%A3_V2的官方文档慢慢选择~ 查看全部
网站调用新浪微博内容(Web2.0时代,新浪微博API官方的方式总是显得很麻烦)
新浪微博的API官方提供了多种调用方式,支持编程,归根结底有两种:
1.基于 Oauth 协议,使用 Open API。(%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E)
2.使用微博JS-SDK( )。
官方的方式总是显得繁琐。让我们来探索一下,是否可以使用非官方的方法,在没有AppKey、身份验证和Ajax 的情况下,跨域调用新浪微博API?
在Web2.0时代,短链服务非常流行。新浪的短链服务域名是,这个域名真的很短,没办法变短。
打开新浪微博API官方文档,短链服务描述如下:

上面列出的方法调用都是相似的。我们以第一种方法 short_url/shorten 为例。打开详细说明:

我们来分析一下这一段:
1.需要登录:不。这很重要,因为我们不需要登录,我们的“免认证”就可以正常工作。
2.频率限制:是的。这也是很关键的,也就是说如果我们走官方的方式,调用的次数会非常有限。
3.支持的格式:JSON。事实上,根据实验,新浪微博不仅支持JSON,还支持JSONP,但文档并没有告诉我们。这也很关键。因为有JSONP,就意味着可以轻松跨域。
4.网址:. 事实上,这也是一个谎言。HTTPS 肯定会影响速度。经过实验,直接把HTTPS改成HTTP还是可以的。
接下来,一一突破难关。
一、使用JQuery+JSONP跨域。
参考文档:
jquery对JSONP非常友好,调用AJAX时只需指定dataType:jsonp即可。
二是频率限制问题。
由于不需要登录,因此可以绕过频率限制问题。因为 AppKey 本身是半公开的。我们可以轻松地 Google 到一堆很棒的应用程序的 Appkey。
例如:
iPhone新浪微博客户端App Key:5786724301
iPad新浪客户端App Key:2849184197
Google.Nexus Wave 客户端应用密钥:1206405345
周伯通微博经理App Key:202088835
微博应用密钥:211160679
上面列出的 AppKey 都是来自一些拥有大量用户的移动应用程序。它们的频率限制非常宽松,几乎可以理解为“无限制”。为了解决频率限制问题,我们可以使用他们的Appkey。
另外:新浪微博API的频次限制有两个维度,服务IP维度和用户IP维度。. 这与本文无关,因为 Javascript 在客户端运行。但是如果要修改本文中提到的方法,使用C#或其他高级语言在服务器端调用,一定要注意服务器IP维度。
三、一个简单的实验。
浏览器会显示
{"urls":[
{"result":true,"url_short":"http://t.cn/h5FGy","url_long":","type":0}
]}
通过访问上述的地址,您已经得到了的段地址:http://t.cn/h5FGy
注意我们使用的是http而非https,不需要使用https,上文已经提到了。
四、最终代码示例
最终代码的示例参考这里http://haotaoqu.com/item-45.html
这个示例将一个又臭又长的淘宝客URL地址转换为了新浪短地址。
Javascript代码如下:
五、除了short_url/shorten,其他可以用这个方法调用的API
任何标有“login required: no”的接口都可以通过本文的rogue方法调用。打开%E6%96%87%E6%A1%A3_V2的官方文档慢慢选择~
网站调用新浪微博内容(网站调用新浪微博内容时,它会被搜索引擎索引)
网站优化 • 优采云 发表了文章 • 0 个评论 • 111 次浏览 • 2022-04-04 06:04
网站调用新浪微博内容时,它会从新浪微博服务器采集每个useragent的调用参数,所以它会需要耗费1秒的时间来请求,这个时间称为爬虫的异步时间。另外它还需要一个发送时间,也就是1秒内发送调用请求的响应时间。
这个时间一定是固定的,没有提示。
这和google算法关系很大的
相信绝大多数人都遇到过这种情况,微博启动的时候一定会启动后台爬虫,爬取useragent,然后返回数据服务器做归档。微博里需要实时更新的信息,如时间,位置,图片等也会通过后台链接获取当前的页面,再通过header下发给server进行抓取。server后台会把抓取到的useragent参数送到归档服务器,经过几秒时间,其中网页抓取到的内容就被归档到服务器了。如果微博处于热门话题,你看到的内容也更容易被搜索引擎索引。
1、数据库2、server层主要是这两个
不会
其实我也一直觉得奇怪。如果新浪微博内容抓取时也能靠google的api完成那就好了。如果是新浪自己做的api完成后端爬虫和传输那也完全可以把。关键还是用户需求变化。比如我以前看到新浪在amazon那个抓取下单,新浪并没有把那个链接、国内新闻useragent抓取,而是把后端抓取的数据和国外那个合并到一起了。
比如useragent是一个网页地址在新浪这个地址表单或其他的形式的形式。这就给用户带来更大的意义。比如正常从微博搜索结果页找,搜索结果页并不会增加以前的抓取一个记录。而新浪抓取不到那个也带不来任何意义了。不过我现在觉得这个主要就是google把自己的服务赚到了而已。 查看全部
网站调用新浪微博内容(网站调用新浪微博内容时,它会被搜索引擎索引)
网站调用新浪微博内容时,它会从新浪微博服务器采集每个useragent的调用参数,所以它会需要耗费1秒的时间来请求,这个时间称为爬虫的异步时间。另外它还需要一个发送时间,也就是1秒内发送调用请求的响应时间。
这个时间一定是固定的,没有提示。
这和google算法关系很大的
相信绝大多数人都遇到过这种情况,微博启动的时候一定会启动后台爬虫,爬取useragent,然后返回数据服务器做归档。微博里需要实时更新的信息,如时间,位置,图片等也会通过后台链接获取当前的页面,再通过header下发给server进行抓取。server后台会把抓取到的useragent参数送到归档服务器,经过几秒时间,其中网页抓取到的内容就被归档到服务器了。如果微博处于热门话题,你看到的内容也更容易被搜索引擎索引。
1、数据库2、server层主要是这两个
不会
其实我也一直觉得奇怪。如果新浪微博内容抓取时也能靠google的api完成那就好了。如果是新浪自己做的api完成后端爬虫和传输那也完全可以把。关键还是用户需求变化。比如我以前看到新浪在amazon那个抓取下单,新浪并没有把那个链接、国内新闻useragent抓取,而是把后端抓取的数据和国外那个合并到一起了。
比如useragent是一个网页地址在新浪这个地址表单或其他的形式的形式。这就给用户带来更大的意义。比如正常从微博搜索结果页找,搜索结果页并不会增加以前的抓取一个记录。而新浪抓取不到那个也带不来任何意义了。不过我现在觉得这个主要就是google把自己的服务赚到了而已。
网站调用新浪微博内容( 安卓项目添加新浪微博一件关注的功能,注册什么SDK)
网站优化 • 优采云 发表了文章 • 0 个评论 • 47 次浏览 • 2022-04-03 22:12
安卓项目添加新浪微博一件关注的功能,注册什么SDK)
调用新浪微博展示用户信息
最近需要在开发的Android项目中添加新浪微博的关注功能。本来是一个很简单的功能,就是调用新浪微博客户端的Activity来展示用户信息,然后用户就可以点击关注按钮了。它原本是一个非常简单的功能。网上能找到的代码几乎都是JS代码,或者注册新浪微博SDK的代码。这么简单的功能,应该不需要注册任何SDK,也不想参与任何JS。研究一下新浪微博客户端的Activity就好了。
首先,我们需要使用AXMLPrinter2.jar反编译新浪微博的AndroidManifest.xml,找到显示用户信息的页面。反编译后的代码如下:
java -jar AXMLPrinter2.jar AndroidManifest.xml > a.xml
打开反编译的a.xml,搜索userinfo,幸运的是找到了UserInfoActivity,如下图:
UserInfoActivity 注册了两个意图过滤器。第一个注册的url是sinaweibo://userinfo?uid=3444956000。有了这些信息,通过如下代码调用新浪微博客户端显示用户信息:
var intent = new Intent(Intent.ActionView);
var uri = Android.Net.Uri.Parse("sinaweibo://userinfo?uid=3444956000");
intent.SetData(uri);
var chooseIntent = Intent.CreateChooser(intent, "Weibo");
StartActivity(chooseIntent);
不过以上代码的前提是用户已经安装了新浪微博客户端,否则运行会报错。好在还有第二个,我们可以用下面的代码来调用:
var intent = new Intent(Intent.ActionView);
var uri = Android.Net.Uri.Parse("https://weibo.cn/qr/userinfo?uid=3444956000");
intent.SetData(uri);
var chooseIntent = Intent.CreateChooser(intent, "Weibo");
StartActivity(chooseIntent);
上面代码的效果是:
如果用户没有安装新浪微博,直接调用浏览器打开地址;如果用户安装新浪微博,会弹出如下对话框供用户选择:
再次鄙视新浪微博的开放性,但这个功能是不开放的。 查看全部
网站调用新浪微博内容(
安卓项目添加新浪微博一件关注的功能,注册什么SDK)
调用新浪微博展示用户信息
最近需要在开发的Android项目中添加新浪微博的关注功能。本来是一个很简单的功能,就是调用新浪微博客户端的Activity来展示用户信息,然后用户就可以点击关注按钮了。它原本是一个非常简单的功能。网上能找到的代码几乎都是JS代码,或者注册新浪微博SDK的代码。这么简单的功能,应该不需要注册任何SDK,也不想参与任何JS。研究一下新浪微博客户端的Activity就好了。
首先,我们需要使用AXMLPrinter2.jar反编译新浪微博的AndroidManifest.xml,找到显示用户信息的页面。反编译后的代码如下:
java -jar AXMLPrinter2.jar AndroidManifest.xml > a.xml
打开反编译的a.xml,搜索userinfo,幸运的是找到了UserInfoActivity,如下图:
UserInfoActivity 注册了两个意图过滤器。第一个注册的url是sinaweibo://userinfo?uid=3444956000。有了这些信息,通过如下代码调用新浪微博客户端显示用户信息:
var intent = new Intent(Intent.ActionView);
var uri = Android.Net.Uri.Parse("sinaweibo://userinfo?uid=3444956000");
intent.SetData(uri);
var chooseIntent = Intent.CreateChooser(intent, "Weibo");
StartActivity(chooseIntent);
不过以上代码的前提是用户已经安装了新浪微博客户端,否则运行会报错。好在还有第二个,我们可以用下面的代码来调用:
var intent = new Intent(Intent.ActionView);
var uri = Android.Net.Uri.Parse("https://weibo.cn/qr/userinfo?uid=3444956000");
intent.SetData(uri);
var chooseIntent = Intent.CreateChooser(intent, "Weibo");
StartActivity(chooseIntent);
上面代码的效果是:
如果用户没有安装新浪微博,直接调用浏览器打开地址;如果用户安装新浪微博,会弹出如下对话框供用户选择:
再次鄙视新浪微博的开放性,但这个功能是不开放的。
网站调用新浪微博内容(网站调用新浪微博内容时,不是从新浪微博的草根机制算法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-04-02 17:03
网站调用新浪微博内容时,不是从新浪微博的草根机制算法发出消息推送而是从百度爬虫抓取,也就是说,新浪微博的吃相很难看说他是抄袭?新浪微博已经明确表态,不解决这个问题,
实际上现在有的网站就是通过网络爬虫抓取新浪网的内容,然后转发出去。
新浪从来不靠这赚钱,说白了就是维护客户体验,不再制造垃圾信息。
同意楼上的观点,现在的网站获取用户信息和交流交流是靠人工爬虫获取的。也就是俗称的人肉爬虫,对搜索引擎的冲击一定是蛮大的,毕竟是自家网站,有严格的权限审查要求。但是会造成网站的假内容泛滥,这就是技术问题了。
实际上,是人工计算机爬虫去访问新浪微博的,网站主不去访问新浪微博。
首先得说明一点:人肉搜索不是不可取的,只是前几年说好的人肉搜索是指ip网站,而现在火力在获取内容上,可以说是比较不健康的企业文化。1、说下api的特点及作用:简单来说就是用浏览器内置的api访问。正常来说肯定不会被要求,因为外链是双向的,而api就是将外链加权一个很重要的部分。但是,上面也说了,用浏览器获取是不可取的,如果网站想合法获取用户信息,还是用api很靠谱。
另外,如果程序被植入过爬虫代码,是非法的,一经发现后果严重。所以,为了基本的用户体验,还是用api。2、人肉搜索在大流量网站难以见到吗?并不是。毕竟,当前平台都在让流量分散到一些平台比如新浪微博、微信里,必然爬虫对于大流量有这自身考虑,爬取也不会很泛滥,爬取时有个限制才行。api的价值更多是在数据挖掘方面,其根本原因还是内容分析,这方面java、python、ruby都可以,当然还有c#。
国内的知名网站有人肉搜索专利,还有利用人肉搜索找数据的。我接触过比如csdn和快易搜也就是flipboard的api,他们是整站对爬取的控制严格些,其他的网站简单,甚至也可以用这个api,但是不能随便滥用。(这个曾经有过玩笑谈到过)总的来说,人肉搜索技术基本达到可以商用程度,其原理也与正常爬虫并无二致,至于其不可取的部分,更多原因还是在于合规性与法律方面,并不是从业人员不了解而已。 查看全部
网站调用新浪微博内容(网站调用新浪微博内容时,不是从新浪微博的草根机制算法)
网站调用新浪微博内容时,不是从新浪微博的草根机制算法发出消息推送而是从百度爬虫抓取,也就是说,新浪微博的吃相很难看说他是抄袭?新浪微博已经明确表态,不解决这个问题,
实际上现在有的网站就是通过网络爬虫抓取新浪网的内容,然后转发出去。
新浪从来不靠这赚钱,说白了就是维护客户体验,不再制造垃圾信息。
同意楼上的观点,现在的网站获取用户信息和交流交流是靠人工爬虫获取的。也就是俗称的人肉爬虫,对搜索引擎的冲击一定是蛮大的,毕竟是自家网站,有严格的权限审查要求。但是会造成网站的假内容泛滥,这就是技术问题了。
实际上,是人工计算机爬虫去访问新浪微博的,网站主不去访问新浪微博。
首先得说明一点:人肉搜索不是不可取的,只是前几年说好的人肉搜索是指ip网站,而现在火力在获取内容上,可以说是比较不健康的企业文化。1、说下api的特点及作用:简单来说就是用浏览器内置的api访问。正常来说肯定不会被要求,因为外链是双向的,而api就是将外链加权一个很重要的部分。但是,上面也说了,用浏览器获取是不可取的,如果网站想合法获取用户信息,还是用api很靠谱。
另外,如果程序被植入过爬虫代码,是非法的,一经发现后果严重。所以,为了基本的用户体验,还是用api。2、人肉搜索在大流量网站难以见到吗?并不是。毕竟,当前平台都在让流量分散到一些平台比如新浪微博、微信里,必然爬虫对于大流量有这自身考虑,爬取也不会很泛滥,爬取时有个限制才行。api的价值更多是在数据挖掘方面,其根本原因还是内容分析,这方面java、python、ruby都可以,当然还有c#。
国内的知名网站有人肉搜索专利,还有利用人肉搜索找数据的。我接触过比如csdn和快易搜也就是flipboard的api,他们是整站对爬取的控制严格些,其他的网站简单,甚至也可以用这个api,但是不能随便滥用。(这个曾经有过玩笑谈到过)总的来说,人肉搜索技术基本达到可以商用程度,其原理也与正常爬虫并无二致,至于其不可取的部分,更多原因还是在于合规性与法律方面,并不是从业人员不了解而已。
网站调用新浪微博内容(新浪应用开发:使用新浪微博API发一条微博使用)
网站优化 • 优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2022-04-02 06:07
新浪应用开发:使用新浪微博API发微博
使用新浪微博API发微博第一步:首先下载安装并配置JAVA环境,然后下载myecplise10。Step 2:在新浪微博API页面找到并下载SDK for JAVA, Step 3:申请成为开发者,获取新应用的APP_KEY。第四步:按照说明配置:Config.properties中的client_ID:appkey创建的appkey client_SERCRET:app_secret获取的appsecret redirect_URI:OAuth2回调地址Callback address):报错如下:第三方错误访问出错!您在新浪微博上访问的网站认证失败。请联系开发者助理或稍后再试。(error:invalid_request) Q:这个回调地址需要独立的域名和空间吗?A:不需要独立的域名和空间,可以在本地使用,但必须配置互联网信息服务。第六步:运行OAuth4Code.java获取code,输入code获取access token。第7步:编写代码发送微博。代码显示如下:
立即下载 查看全部
网站调用新浪微博内容(新浪应用开发:使用新浪微博API发一条微博使用)
新浪应用开发:使用新浪微博API发微博
使用新浪微博API发微博第一步:首先下载安装并配置JAVA环境,然后下载myecplise10。Step 2:在新浪微博API页面找到并下载SDK for JAVA, Step 3:申请成为开发者,获取新应用的APP_KEY。第四步:按照说明配置:Config.properties中的client_ID:appkey创建的appkey client_SERCRET:app_secret获取的appsecret redirect_URI:OAuth2回调地址Callback address):报错如下:第三方错误访问出错!您在新浪微博上访问的网站认证失败。请联系开发者助理或稍后再试。(error:invalid_request) Q:这个回调地址需要独立的域名和空间吗?A:不需要独立的域名和空间,可以在本地使用,但必须配置互联网信息服务。第六步:运行OAuth4Code.java获取code,输入code获取access token。第7步:编写代码发送微博。代码显示如下:
立即下载
网站调用新浪微博内容(前段时间收到了新浪微博客开放平台发来协议)
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-03-29 16:04
前段时间收到新浪微博开放平台发来的邮件,宣布OAuth1协议将在9月份停止,让我很意外。以下为邮件原文:
尊敬的开发者您好:
新浪微博开放平台预计于2012年9月停止使用旧接口和OAuth1.0。请尽快将您的应用迁移到新接口和OAuth2.0。
新版界面效率更高,功能更丰富。为了帮助您迁移,请参考以下链接:
...
希望大家做好相关准备。技术问题可以咨询@microblogging API。给开发者带来的不便敬请谅解。
今年 9 月的最后期限是一个重磅炸弹,让所有仍在 Oauth1 上的 网站 都面临不得不升级的尴尬。
之前花了一些时间研究了新浪微博的全过程。事实上,我大部分时间都在研究它的审计机制。OAuth2 调用相对简单。先说一下如何使用OAuth2进行授权。
其实开发前还需要做一些准备工作,比如在新浪微博开放平台上创建一个账号,其实就是一个微博账号。登录后访问,点击“网站访问”,会引导你添加一个新的网站表单,这里有一点需要注意,目前,网站的访问新浪微博可以验证域名的归属,所以必须输入正确的域名并在网站首页添加相应的meta标签才能通过。完成后不需要立即提交审核,因为这一步需要提供备案密码,不备案不能通过,但是验证域名的前提是服务器的80端口可以访问,并且是一个解析的域名,
网站访问后获取的App Key和App Secret需要保存,在代码中使用。
由于我更喜欢使用design,所以OAuth2的集成也是基于design,在Gemfile中添加了对应的gem:
宝石文件
1
2
3
# Weibo support
gem 'devise'
gem 'omniauth-weibo-oauth2', '~> 0.2.0'
在项目根目录下执行bundle,安装对应的gem
使用设计的朋友应该知道,user.rb模型中默认会有一个功能模块配置,模块修改如下:
应用程序/模型/user.rb
1
2
3
4
5
6
7
8
9
10
11
12
class User > User.omniauth_providers
=> [:weibo]
至此,我们可以配置我们之前做的网站访问,新建一个service.yml来存放第三方App Key和App Secret:
应用程序/配置/服务.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<p>common: &common
weibo:
api_key: "这里填写你获取到的api key"
api_secret: "这里填写你获取到的api secret"
redirect_uri: "http://www.yourdomain.com/user ... ot%3B
production: 查看全部
网站调用新浪微博内容(前段时间收到了新浪微博客开放平台发来协议)
前段时间收到新浪微博开放平台发来的邮件,宣布OAuth1协议将在9月份停止,让我很意外。以下为邮件原文:
尊敬的开发者您好:
新浪微博开放平台预计于2012年9月停止使用旧接口和OAuth1.0。请尽快将您的应用迁移到新接口和OAuth2.0。
新版界面效率更高,功能更丰富。为了帮助您迁移,请参考以下链接:
...
希望大家做好相关准备。技术问题可以咨询@microblogging API。给开发者带来的不便敬请谅解。
今年 9 月的最后期限是一个重磅炸弹,让所有仍在 Oauth1 上的 网站 都面临不得不升级的尴尬。
之前花了一些时间研究了新浪微博的全过程。事实上,我大部分时间都在研究它的审计机制。OAuth2 调用相对简单。先说一下如何使用OAuth2进行授权。
其实开发前还需要做一些准备工作,比如在新浪微博开放平台上创建一个账号,其实就是一个微博账号。登录后访问,点击“网站访问”,会引导你添加一个新的网站表单,这里有一点需要注意,目前,网站的访问新浪微博可以验证域名的归属,所以必须输入正确的域名并在网站首页添加相应的meta标签才能通过。完成后不需要立即提交审核,因为这一步需要提供备案密码,不备案不能通过,但是验证域名的前提是服务器的80端口可以访问,并且是一个解析的域名,
网站访问后获取的App Key和App Secret需要保存,在代码中使用。
由于我更喜欢使用design,所以OAuth2的集成也是基于design,在Gemfile中添加了对应的gem:
宝石文件
1
2
3
# Weibo support
gem 'devise'
gem 'omniauth-weibo-oauth2', '~> 0.2.0'
在项目根目录下执行bundle,安装对应的gem
使用设计的朋友应该知道,user.rb模型中默认会有一个功能模块配置,模块修改如下:
应用程序/模型/user.rb
1
2
3
4
5
6
7
8
9
10
11
12
class User > User.omniauth_providers
=> [:weibo]
至此,我们可以配置我们之前做的网站访问,新建一个service.yml来存放第三方App Key和App Secret:
应用程序/配置/服务.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<p>common: &common
weibo:
api_key: "这里填写你获取到的api key"
api_secret: "这里填写你获取到的api secret"
redirect_uri: "http://www.yourdomain.com/user ... ot%3B
production:
网站调用新浪微博内容(开发者注册新浪微博开放平台完成开发者认证按照流程走,写回调方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2022-03-26 22:08
比如QQ互联,这里详细介绍如何实现微博登录。
成为开发者
首先,你还是要注册一个微博账号,使用微博账号登录开放平台。
打开微博开放平台官网,点击登录完成开发者注册
新浪微博开放平台
完成开发者认证
按照流程,开发者类型一般选择个人。
开发者认证
创建网站应用
一般来说,我们创建的是网站应用程序,其他应用程序类似,所以这里仅以网站应用程序为例。
完成认证后,选择首页微链接菜单下的网站访问(或首页下的网站访问WEB),并填写所需信息。
创建应用
需要准备的材料有:
1、域名注册完成
2、已开发网站
3、服务器
4、应用图标
注意:
填写基本信息后,还需要填写高级信息。高级信息中的授权回调页面和取消授权回调页面非常重要,非常重要,非常重要(重要的事情说三遍)。
授权回调页面是授权完成后回调的页面,该页面必须在申请地址域名下。同理,取消授权回调页面是取消授权后回调的页面(一般是跳转回登录页面)。
有节制
审稿时间一般为1个工作日,所以为了节省时间,信息一定要准确,避免多次修改。
审计
页面开发
开发模式有两种,一种是使用sdk,一种是自定义开发。SDK开发门槛低,无需了解具体授权逻辑。只需粘贴代码。下面简单介绍一下登录按钮(不推荐这种方式,推荐定制开发)。
打开链接
配置登录按钮样式
配置登录按钮样式
选择一个应用程序
复制代码
1、将 XML 命名空间添加到 HTML 标记
2、在 HEAD 头中引入 WB.JS
3、 在需要部署登录按钮的地方粘贴WBML代码(复制代码)
4、写回调方法
WB2.anyWhere(函数(W){
W.widget.connectButton({
id: "wb_connect_btn",
类型:“3,2”,
打回来 : {
login:function(o){ //登录后回调函数
},
logout:function(){ //退出后回调函数
}
}
});
定制开发(推荐)
我们是专业的,一定要选择定制开发(可以跳过上面的sdk教程)。
填写完网站应用信息后,开始使用界面,登录功能主要包括以下几个界面:
1、OAuth2.0 授权登录接口
2、获取token和uid接口
3、获取用户信息接口
第 1 步:添加指向登录页面的链接
微博
这里的应用主键是App Key。在开发平台的应用管理中可以看到回调地址是应用高级信息中的授权回调页面,两者必须相同。
第二步:开发授权回调页面
因为回调页面必须在外网,所以开发过程中必须经常部署新的网站(更新部分就足够了),所以这一步之后服务器必须要有权限。
回调页面中有一个很重要的参数,就是地址栏上的code参数。code参数是授权获取token后自动带上的,并且只能使用一次。如果再次使用,则会出现错误。
第三步:根据代码交换token和uid
这时需要在后台以post的形式请求access_token接口,地址为
"+ 应用主键+ "&client_secret="+ 应用秘钥+ "&grant_type=authorization_code&redirect_uri="+ 回调地址+ "&code="+ 获取代码
应用主键和应用密钥都可以在应用管理中找到。因为很重要,所以必须在后台请求(前台请求有跨域和header信息不一致的问题),并且回调地址和代码都是通过前台传递的,下面是后台代码
C#获取微博token
令牌实体类
第四步:获取用户信息(登录)
获取用户信息的前提是提供token和uid,所以我们调用第三步封装的方法privateWBTokenStateGetWeiBoToken(stringcode, stringcallback)。此时请求的地址是""+兑换了token+"&uid="+兑换了uid
此时代码如下
微博登录
微博用户实体类
具体登录逻辑略...
第 5 步:调用前台
这时候后台已经写好了,前台开始打电话。
先判断回调地址的code参数是否为空,然后动态获取回调地址(后面改很麻烦,测试的时候一定要写死),然后调用后台写的登录接口(后台登录界面自动交换token、uid并获取用户信息),下面是具体代码
使用angularjs,应该不难理解
结束语
微博登录的意义在于接入大量微博用户,降低网站注册门槛,实现社交关系的零成本引入和优质内容的快速传播。
ps:
代码只能使用一次,再次使用会报错,需要在后台调用post方法。
授权机制(包括获取uid)
授权机制
获取uid
获取用户信息
js SDK 查看全部
网站调用新浪微博内容(开发者注册新浪微博开放平台完成开发者认证按照流程走,写回调方法)
比如QQ互联,这里详细介绍如何实现微博登录。
成为开发者
首先,你还是要注册一个微博账号,使用微博账号登录开放平台。
打开微博开放平台官网,点击登录完成开发者注册

新浪微博开放平台
完成开发者认证
按照流程,开发者类型一般选择个人。

开发者认证
创建网站应用
一般来说,我们创建的是网站应用程序,其他应用程序类似,所以这里仅以网站应用程序为例。
完成认证后,选择首页微链接菜单下的网站访问(或首页下的网站访问WEB),并填写所需信息。

创建应用
需要准备的材料有:
1、域名注册完成
2、已开发网站
3、服务器
4、应用图标
注意:
填写基本信息后,还需要填写高级信息。高级信息中的授权回调页面和取消授权回调页面非常重要,非常重要,非常重要(重要的事情说三遍)。
授权回调页面是授权完成后回调的页面,该页面必须在申请地址域名下。同理,取消授权回调页面是取消授权后回调的页面(一般是跳转回登录页面)。
有节制
审稿时间一般为1个工作日,所以为了节省时间,信息一定要准确,避免多次修改。

审计
页面开发
开发模式有两种,一种是使用sdk,一种是自定义开发。SDK开发门槛低,无需了解具体授权逻辑。只需粘贴代码。下面简单介绍一下登录按钮(不推荐这种方式,推荐定制开发)。
打开链接
配置登录按钮样式

配置登录按钮样式
选择一个应用程序
复制代码
1、将 XML 命名空间添加到 HTML 标记
2、在 HEAD 头中引入 WB.JS
3、 在需要部署登录按钮的地方粘贴WBML代码(复制代码)
4、写回调方法
WB2.anyWhere(函数(W){
W.widget.connectButton({
id: "wb_connect_btn",
类型:“3,2”,
打回来 : {
login:function(o){ //登录后回调函数
},
logout:function(){ //退出后回调函数
}
}
});
定制开发(推荐)
我们是专业的,一定要选择定制开发(可以跳过上面的sdk教程)。
填写完网站应用信息后,开始使用界面,登录功能主要包括以下几个界面:
1、OAuth2.0 授权登录接口
2、获取token和uid接口
3、获取用户信息接口
第 1 步:添加指向登录页面的链接
微博
这里的应用主键是App Key。在开发平台的应用管理中可以看到回调地址是应用高级信息中的授权回调页面,两者必须相同。
第二步:开发授权回调页面
因为回调页面必须在外网,所以开发过程中必须经常部署新的网站(更新部分就足够了),所以这一步之后服务器必须要有权限。
回调页面中有一个很重要的参数,就是地址栏上的code参数。code参数是授权获取token后自动带上的,并且只能使用一次。如果再次使用,则会出现错误。
第三步:根据代码交换token和uid
这时需要在后台以post的形式请求access_token接口,地址为
"+ 应用主键+ "&client_secret="+ 应用秘钥+ "&grant_type=authorization_code&redirect_uri="+ 回调地址+ "&code="+ 获取代码
应用主键和应用密钥都可以在应用管理中找到。因为很重要,所以必须在后台请求(前台请求有跨域和header信息不一致的问题),并且回调地址和代码都是通过前台传递的,下面是后台代码

C#获取微博token

令牌实体类
第四步:获取用户信息(登录)
获取用户信息的前提是提供token和uid,所以我们调用第三步封装的方法privateWBTokenStateGetWeiBoToken(stringcode, stringcallback)。此时请求的地址是""+兑换了token+"&uid="+兑换了uid
此时代码如下

微博登录

微博用户实体类
具体登录逻辑略...
第 5 步:调用前台
这时候后台已经写好了,前台开始打电话。
先判断回调地址的code参数是否为空,然后动态获取回调地址(后面改很麻烦,测试的时候一定要写死),然后调用后台写的登录接口(后台登录界面自动交换token、uid并获取用户信息),下面是具体代码

使用angularjs,应该不难理解
结束语
微博登录的意义在于接入大量微博用户,降低网站注册门槛,实现社交关系的零成本引入和优质内容的快速传播。
ps:
代码只能使用一次,再次使用会报错,需要在后台调用post方法。
授权机制(包括获取uid)
授权机制
获取uid
获取用户信息
js SDK
网站调用新浪微博内容(探索的过程1.了解大致过程登陆微博,文章可能不再适用)
网站优化 • 优采云 发表了文章 • 0 个评论 • 47 次浏览 • 2022-03-26 14:06
概述:
由于业务需要,需要编写爬虫代码来爬取新浪微博用户的信息。
虽然网上可以查到很多资料,但由于新浪微博的改版,其登录机制被修改了,所以很多老的文章都不适合用了。
经过一番摸索,成功模拟了新浪微博的登录操作。该项目使用 Javascript 语言并在 ChromeExtension 中运行。我想和大家分享这个过程和经验。
请注意,这篇文章是在 2013.08.16 上写的。由于微博业务变化频繁,文章可能随着年龄的增长不再适用。
文本:探索的过程
1. 了解大致流程
登录微博,使用fiddler工具监听HTTP请求,拦截如下操作:
可以看出,在整个微博登录过程中,有四个重要的HTTP请求,分别是:
(1) GET /sso/prelogin.php
(2) POST /sso/login.php
(3) GET /ajaxlogin.php
(4) 获取 /u/2813262187
其中,sso为单点登录
(1)是登录前的预处理,名字也很明显--pre,这一步主要是获取几个重要的参数,作为下一个POST表单的参数。
您可以在浏览器中访问该请求的地址,查看返回结果:
(v1.4.11)
结果如下:
1sinaSSOController.preloginCallBack({"retcode":0,
2“服务器时间”:1376533839,
3"pcid":"gz-7bdd82b8980057a8bbc1f86b21d5a86184dd",
4"nonce":"R1KGHZ",
5 “PUBKEY”: “EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC2533E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443”
6"rsakv":"1330428213",
7“执行时间”:2})
返回的数据包括 servertime:服务时间戳,nonce:6 位随机码,pubkey:用于 rsa2 密码加密的公钥,rsakv:显然也用于加密。
下一步需要这四个值。
长期版的新浪微博登录机制,采用sha的加密方式,没有pubkey和rsakv参数。
所以网上看到的2012爬虫模拟登录代码的爬虫代码已经不适合使用了,但是整体逻辑没有太大变化,稍微修改一下还是可以使用的。=.=
给出两个参考文章:
对于 Python
对于 PHP
(2)提交表单的操作,我们还是看HTTP请求,看表单内容
请参阅 servertime、nonce、rsakv 和 su:加密的用户名,sp:加密的密码。现在的问题是如何加密用户名和密码。我们很容易将注意力集中在 js 代码上。
请求新浪登录页面:,其中收录密码加密的js代码,
里面的代码是加密的,找个工具来解密(),你几乎看不到里面的逻辑。
(3)分析 sslogin.js
既然知道了servertime和nonce是用来加密的,那我们不妨在文件中搜索一下这两个关键字,找到好东西:
回到上面看到,表格中有su和sp,两者都在这里,可以看到su使用的是base64加密方式;而 su 稍微复杂一点,
if是当前版本新浪密码加密方式rsa2的代码,else是版本sha加密的代码,我们只需要关心if里面的内容,
加密过程很简单,首先生成一个RSAKey对象,设置PublicKey,然后加密。
一个个往回推,可以知道最后一步加密的最后一个参数ag就是原来的密码值,不会看的眼花缭乱~
综上所述,调用 setPublic() 时以一长串 pubkey 和 10001 作为参数,注意都是十六进制数;然后使用 (servertime + nonce + pwd) 作为参数调用 Encrypt()。
让我们看看sinaSSOEncoder是什么。它的定义在解密代码的第 1118 行。从这里,截取到文件末尾,移出来供我们自己使用。
1}).call(sinaSSOEncoder);
2//sinaSSOController=newSSOController();
3//sinaSSOController.init();
这解决了密码加密的问题。
2. 模拟请求过程
现在您知道了一般原理,您可以开始模拟整个登录过程。
(1)GET 请求(v1.4.11)
返回的数据定期匹配 servertime、nonce 和 rsakv。请注意,请求时还应将时间戳发送到服务器。我们来看看fiddler监控的QueryString:
前五个参数都是在url中声明的,最后一个_发送请求的时候会加上,传过来。
我正在使用 Javascript,只需使用 Jquery 并将其添加到 $.ajax 中的数据属性。
(2)POST 请求(v1.4.11)提交登录表单
1个代理('(v1.4.11)',
2{type:'POST',headers:{Referer:'#39;},
3个数据:{
4entry:'微博',
5个网关:1个,
6来自:'',
7保存状态:7,
8使用票:1,
9pagerefer:'#39;,
10vsnf:1,
11 苏:'MTgxMDU0MjMzNyU0MHFxLmNvbQ==',
12service:'迷你博客',
13 服务器时间:服务器时间,
14 随机数:随机数,
15pwencode:'rsa2',
16 rsakv:rsakv,
17 sp:sp,
18编码:'UTF-8',
19prelt:505,
20url:'ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
21 返回类型:“元”
二十二}
23},函数(错误,数据){...});
agent是发送请求事务的封装模块,重点关注里面的数据对象,其中su是base64加密的用户名,每次调用都是固定的,所以这里写死;
servertime、nonce、rsakv都是上一步截取的;
sp是加密后的密码,可以参考上面的加密方法得到。 查看全部
网站调用新浪微博内容(探索的过程1.了解大致过程登陆微博,文章可能不再适用)
概述:
由于业务需要,需要编写爬虫代码来爬取新浪微博用户的信息。
虽然网上可以查到很多资料,但由于新浪微博的改版,其登录机制被修改了,所以很多老的文章都不适合用了。
经过一番摸索,成功模拟了新浪微博的登录操作。该项目使用 Javascript 语言并在 ChromeExtension 中运行。我想和大家分享这个过程和经验。
请注意,这篇文章是在 2013.08.16 上写的。由于微博业务变化频繁,文章可能随着年龄的增长不再适用。
文本:探索的过程
1. 了解大致流程
登录微博,使用fiddler工具监听HTTP请求,拦截如下操作:

可以看出,在整个微博登录过程中,有四个重要的HTTP请求,分别是:
(1) GET /sso/prelogin.php
(2) POST /sso/login.php
(3) GET /ajaxlogin.php
(4) 获取 /u/2813262187
其中,sso为单点登录
(1)是登录前的预处理,名字也很明显--pre,这一步主要是获取几个重要的参数,作为下一个POST表单的参数。
您可以在浏览器中访问该请求的地址,查看返回结果:
(v1.4.11)
结果如下:
1sinaSSOController.preloginCallBack({"retcode":0,
2“服务器时间”:1376533839,
3"pcid":"gz-7bdd82b8980057a8bbc1f86b21d5a86184dd",
4"nonce":"R1KGHZ",
5 “PUBKEY”: “EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC2533E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443”
6"rsakv":"1330428213",
7“执行时间”:2})
返回的数据包括 servertime:服务时间戳,nonce:6 位随机码,pubkey:用于 rsa2 密码加密的公钥,rsakv:显然也用于加密。
下一步需要这四个值。
长期版的新浪微博登录机制,采用sha的加密方式,没有pubkey和rsakv参数。
所以网上看到的2012爬虫模拟登录代码的爬虫代码已经不适合使用了,但是整体逻辑没有太大变化,稍微修改一下还是可以使用的。=.=
给出两个参考文章:
对于 Python
对于 PHP
(2)提交表单的操作,我们还是看HTTP请求,看表单内容

请参阅 servertime、nonce、rsakv 和 su:加密的用户名,sp:加密的密码。现在的问题是如何加密用户名和密码。我们很容易将注意力集中在 js 代码上。
请求新浪登录页面:,其中收录密码加密的js代码,
里面的代码是加密的,找个工具来解密(),你几乎看不到里面的逻辑。
(3)分析 sslogin.js
既然知道了servertime和nonce是用来加密的,那我们不妨在文件中搜索一下这两个关键字,找到好东西:

回到上面看到,表格中有su和sp,两者都在这里,可以看到su使用的是base64加密方式;而 su 稍微复杂一点,
if是当前版本新浪密码加密方式rsa2的代码,else是版本sha加密的代码,我们只需要关心if里面的内容,
加密过程很简单,首先生成一个RSAKey对象,设置PublicKey,然后加密。
一个个往回推,可以知道最后一步加密的最后一个参数ag就是原来的密码值,不会看的眼花缭乱~
综上所述,调用 setPublic() 时以一长串 pubkey 和 10001 作为参数,注意都是十六进制数;然后使用 (servertime + nonce + pwd) 作为参数调用 Encrypt()。
让我们看看sinaSSOEncoder是什么。它的定义在解密代码的第 1118 行。从这里,截取到文件末尾,移出来供我们自己使用。
1}).call(sinaSSOEncoder);
2//sinaSSOController=newSSOController();
3//sinaSSOController.init();
这解决了密码加密的问题。
2. 模拟请求过程
现在您知道了一般原理,您可以开始模拟整个登录过程。
(1)GET 请求(v1.4.11)
返回的数据定期匹配 servertime、nonce 和 rsakv。请注意,请求时还应将时间戳发送到服务器。我们来看看fiddler监控的QueryString:

前五个参数都是在url中声明的,最后一个_发送请求的时候会加上,传过来。
我正在使用 Javascript,只需使用 Jquery 并将其添加到 $.ajax 中的数据属性。
(2)POST 请求(v1.4.11)提交登录表单
1个代理('(v1.4.11)',
2{type:'POST',headers:{Referer:'#39;},
3个数据:{
4entry:'微博',
5个网关:1个,
6来自:'',
7保存状态:7,
8使用票:1,
9pagerefer:'#39;,
10vsnf:1,
11 苏:'MTgxMDU0MjMzNyU0MHFxLmNvbQ==',
12service:'迷你博客',
13 服务器时间:服务器时间,
14 随机数:随机数,
15pwencode:'rsa2',
16 rsakv:rsakv,
17 sp:sp,
18编码:'UTF-8',
19prelt:505,
20url:'ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
21 返回类型:“元”
二十二}
23},函数(错误,数据){...});
agent是发送请求事务的封装模块,重点关注里面的数据对象,其中su是base64加密的用户名,每次调用都是固定的,所以这里写死;
servertime、nonce、rsakv都是上一步截取的;
sp是加密后的密码,可以参考上面的加密方法得到。
网站调用新浪微博内容(安装微博python的安装方式及解决方案 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 43 次浏览 • 2022-03-24 23:07
)
一:获取app-key和app-secret
使用自己的微博账号登录微博开放平台(),在微博开放中心的“创建应用”下创建应用。根据需要填写申请信息。填写完成后,无需提交审核。您所需要的只是应用程序密钥。和应用程序秘密
二:设置授权回调页面
在“微博开放平台”的“管理中心”找到刚刚创建的应用,点击应用,点击左侧的“应用信息”栏,会看到“App key”和“App Secret”,这两个东西是后面程序中用到的。然后点击“应用信息”下“高级信息”中的“编辑”按钮,将“授权回调页面”设置为:,“取消授权回调页面”设置为:。
三:安装微博python SDK
有两种安装方法:
1:下载新浪微博SDK
2:python有一个简单的安装方法:直接在命令行输入:
sudo pip install sinaweibopy
四:实例验证,获取当前登录用户和他关注的用户的最新微博(授权)
这里需要注意的是,当浏览器弹出一个页面时,必须先点击“Authorize”(这里进行的OAuth 2鉴权,我理解是用户访问我的应用,将页面定向到新浪服务器,然后用户向新浪服务器输入信息并授权给我的应用访问用户数据,这里我授权微博给下面的程序),授权后浏览器中的URL类似:将代码后面的代码复制到控件中侧面,程序需要读取数据2024222384d5dc88316d21675259d73a
注意:如果要获取其他信息,只需修改
statuses = client.statuses__friends_timeline()['statuses']
中的 statuss__friends_timeline
# -*- coding: utf-8 -*-
from weibo import APIClient
import webbrowser #python内置的包
APP_KEY = 'xxxxxxxx'#注意替换这里为自己申请的App信息
APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html'#回调授权页面
#利用官方微博SDK
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
#得到授权页面的url,利用webbrowser打开这个url
url = client.get_authorize_url()
print url
webbrowser.open_new(url)
#获取code=后面的内容
print '输入url中code后面的内容后按回车键:'
code = raw_input()
#code = your.web.framework.request.get('code')
#client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
r = client.request_access_token(code)
access_token = r.access_token # 新浪返回的token,类似abc123xyz456
expires_in = r.expires_in
# 设置得到的access_token
client.set_access_token(access_token, expires_in)
#可以打印下看看里面都有什么东西
statuses = client.statuses__friends_timeline()['statuses'] #获取当前登录用户以及所关注用户(已授权)的微博
length = len(statuses)
print length
#输出了部分信息
for i in range(0,length):
print u'昵称:'+statuses[i]['user']['screen_name']
print u'简介:'+statuses[i]['user']['description']
print u'位置:'+statuses[i]['user']['location']
print u'微博:'+statuses[i]['text']
结果如下(截取部分数据):
以下是我的关注者的微博:
以上面的代码为例,我们这里得到的信息是:
查看全部
网站调用新浪微博内容(安装微博python的安装方式及解决方案
)
一:获取app-key和app-secret
使用自己的微博账号登录微博开放平台(),在微博开放中心的“创建应用”下创建应用。根据需要填写申请信息。填写完成后,无需提交审核。您所需要的只是应用程序密钥。和应用程序秘密
二:设置授权回调页面
在“微博开放平台”的“管理中心”找到刚刚创建的应用,点击应用,点击左侧的“应用信息”栏,会看到“App key”和“App Secret”,这两个东西是后面程序中用到的。然后点击“应用信息”下“高级信息”中的“编辑”按钮,将“授权回调页面”设置为:,“取消授权回调页面”设置为:。
三:安装微博python SDK
有两种安装方法:
1:下载新浪微博SDK
2:python有一个简单的安装方法:直接在命令行输入:
sudo pip install sinaweibopy
四:实例验证,获取当前登录用户和他关注的用户的最新微博(授权)
这里需要注意的是,当浏览器弹出一个页面时,必须先点击“Authorize”(这里进行的OAuth 2鉴权,我理解是用户访问我的应用,将页面定向到新浪服务器,然后用户向新浪服务器输入信息并授权给我的应用访问用户数据,这里我授权微博给下面的程序),授权后浏览器中的URL类似:将代码后面的代码复制到控件中侧面,程序需要读取数据2024222384d5dc88316d21675259d73a
注意:如果要获取其他信息,只需修改
statuses = client.statuses__friends_timeline()['statuses']
中的 statuss__friends_timeline
# -*- coding: utf-8 -*-
from weibo import APIClient
import webbrowser #python内置的包
APP_KEY = 'xxxxxxxx'#注意替换这里为自己申请的App信息
APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html'#回调授权页面
#利用官方微博SDK
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
#得到授权页面的url,利用webbrowser打开这个url
url = client.get_authorize_url()
print url
webbrowser.open_new(url)
#获取code=后面的内容
print '输入url中code后面的内容后按回车键:'
code = raw_input()
#code = your.web.framework.request.get('code')
#client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
r = client.request_access_token(code)
access_token = r.access_token # 新浪返回的token,类似abc123xyz456
expires_in = r.expires_in
# 设置得到的access_token
client.set_access_token(access_token, expires_in)
#可以打印下看看里面都有什么东西
statuses = client.statuses__friends_timeline()['statuses'] #获取当前登录用户以及所关注用户(已授权)的微博
length = len(statuses)
print length
#输出了部分信息
for i in range(0,length):
print u'昵称:'+statuses[i]['user']['screen_name']
print u'简介:'+statuses[i]['user']['description']
print u'位置:'+statuses[i]['user']['location']
print u'微博:'+statuses[i]['text']
结果如下(截取部分数据):
以下是我的关注者的微博:
以上面的代码为例,我们这里得到的信息是:
网站调用新浪微博内容(试试用python调用微博API的故事 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-03-24 16:01
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建一个APP,然后获取APP获取OAuth2.0授权所需的app key和app secret。
要了解 OAuth2,您可以查看链接到新浪微博的说明。OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127. 0.0.@ >1 好像不行),这真的让我焦急了好久。我没有使用 API 调用 网站,所以我检查了很多。看到有人写这个地址可以改用,我试了一下,成功了,对掉丝来说是个好消息。
这里有一个简单的程序来体验:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博授权网址,如第2行,用默认浏览器打开后,会提示登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)
登录后,您将被重定向到链接“htmlcode”>
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条推文
但是,这种手动输入代码的方式并不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,可以自动获取代码并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv 查看全部
网站调用新浪微博内容(试试用python调用微博API的故事
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建一个APP,然后获取APP获取OAuth2.0授权所需的app key和app secret。
要了解 OAuth2,您可以查看链接到新浪微博的说明。OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127. 0.0.@ >1 好像不行),这真的让我焦急了好久。我没有使用 API 调用 网站,所以我检查了很多。看到有人写这个地址可以改用,我试了一下,成功了,对掉丝来说是个好消息。
这里有一个简单的程序来体验:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博授权网址,如第2行,用默认浏览器打开后,会提示登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)
登录后,您将被重定向到链接“htmlcode”>
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条推文
但是,这种手动输入代码的方式并不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,可以自动获取代码并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv
网站调用新浪微博内容(试试用python调用微博API的方法微博接口 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 148 次浏览 • 2022-03-24 02:20
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建APP,然后获取APP获取OAuth2.0授权所需的app key和app secret。
了解 OAuth2 并查看新浪微博链接以获取说明。 OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127.0.0.@ >1 好像不行),这真的让我焦急了很久。我没有使用 API 调用 网站,所以我检查了很多。看到有人写可以用这个地址代替,我试了一下,果然,对掉丝来说是个好消息。
让我们从一个简单的程序开始,感受一下:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博的授权网址,如第2行。用默认浏览器打开后,会提示你登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)
登录后,您将被重定向到一个连接
key是码值,是认证的关键。手动输入码值模拟认证
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条微博
但是这种手动输入代码的方式不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,代码可以自动获取并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv 查看全部
网站调用新浪微博内容(试试用python调用微博API的方法微博接口
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建APP,然后获取APP获取OAuth2.0授权所需的app key和app secret。
了解 OAuth2 并查看新浪微博链接以获取说明。 OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127.0.0.@ >1 好像不行),这真的让我焦急了很久。我没有使用 API 调用 网站,所以我检查了很多。看到有人写可以用这个地址代替,我试了一下,果然,对掉丝来说是个好消息。
让我们从一个简单的程序开始,感受一下:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博的授权网址,如第2行。用默认浏览器打开后,会提示你登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)

登录后,您将被重定向到一个连接
key是码值,是认证的关键。手动输入码值模拟认证
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条微博

但是这种手动输入代码的方式不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,代码可以自动获取并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv
网站调用新浪微博内容( 我以新浪微博和人人网为例,叙述一下怎样设置显示来源)
网站优化 • 优采云 发表了文章 • 0 个评论 • 63 次浏览 • 2022-03-24 02:19
我以新浪微博和人人网为例,叙述一下怎样设置显示来源)
在微博源码展示中链接自己的网站增加流量——以微博和人人网为例
Night Breeze 博客•2022 年 3 月 17 日下午 2:12•服务器•阅读 6
社交网站 几乎已成为我们日常在线生活中不可或缺的一部分。发个微博,或者发个大家的状态,就会被很多人看到。社交网站 通常会在发布的推文/状态旁边显示来源,而这些来源通常是社交网站 本身。事实上,这些来源是可以修改的。我们可以根据自己的需要改成符合自己宣传需求的来源,看到这条消息的朋友点击来源直接跳转到我们自己的网站。如果应用得当,这对在我们的社交圈中推广我们的 网站 有很大帮助。今天我就以新浪微博和人人网为例,介绍如何设置显示源。设置来源的效果如下图所示,分别是新浪微博和人人网的状态。
首先我们要了解源码展示的原理。众所周知,社交网站一般会将其部分资源对外开放,让开发者利用这个社交平台设计应用,实现互利共赢。应用发送的微博或者状态可以直接显示应用名称作为其来源,如果应用是网站,用户点击来源后可以跳转到我们自己的网站。使用这样的条件,我们可以在人人网和新浪微博上设置显示源。以下操作以已申请并审核的申请为准。如果您还没有申请,请到新浪微博开放平台和人人开放平台申请。
新浪微博的微博发送API比较简单。新浪官方SDK收录发送模块,我们可以直接使用。点击这里下载新浪微博的PHP SDK。下载完成后,打开config.php文件,填写你的APP-ID、APP-SecretKey、callback.php要上传的URL。将所有文件上传到您的 网站 之一的文件夹中,并再次检查数据,特别是如果 callback.php 的 URL 正确。然后我们登录微博开放平台,在具体应用下找到回调地址选项,设置为callback.php的URL。这样,当我们访问该文件夹时,我们就可以登录并发送微博了。博客会使用你的网站作为来源,可以直接链接。
相反,人人的API调用比较麻烦。这里需要说明一下人人API调用的简单流程。首先我们告知人人应用的名称和需要的权限,人人提供了一个登录界面供用户登录,用户登录后,按照我们刚刚申请的权限进行授权。如果授权成功,会通知人人,人人会返回一个代码。我们将此代码交换为人人公司的 access_token。之后,有了这个access_key,我们就可以调用人人提供的API进行权限内的操作了。人人网提供了相关的SDK,但是我下载下来看了之后发现这个PHP SDK真的很臃肿,语法错误很多。几次修改后,还是编译不通过,所以这里需要我们自己写文件。调用 API。说到这里,我不得不抱怨。几个月前,我很好地使用了 API 的 1.0 版本。最近两个月,大家突然升级了版本,所以我所有的API都要返工了。写。 . . =_=^!!!好了,不说这个了,看代码吧:
1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /><br />
将脚本保存到你的网站并设置为renren.php,登录后,发送状态的API调用就完成了。本次发送的状态会显示来自XX网站的来源提示,点击跳转到我们的网站,达到宣传的目的。
其他社交网站,比如搜狐微博、腾讯微博,甚至Twitter和Facebook,都是类似的。如果需要搭建应用,可以直接阅读开放平台提供的文档,即使是PHP小白(或者其他语言)也可以轻松编写我们需要的功能。 查看全部
网站调用新浪微博内容(
我以新浪微博和人人网为例,叙述一下怎样设置显示来源)
在微博源码展示中链接自己的网站增加流量——以微博和人人网为例
Night Breeze 博客•2022 年 3 月 17 日下午 2:12•服务器•阅读 6
社交网站 几乎已成为我们日常在线生活中不可或缺的一部分。发个微博,或者发个大家的状态,就会被很多人看到。社交网站 通常会在发布的推文/状态旁边显示来源,而这些来源通常是社交网站 本身。事实上,这些来源是可以修改的。我们可以根据自己的需要改成符合自己宣传需求的来源,看到这条消息的朋友点击来源直接跳转到我们自己的网站。如果应用得当,这对在我们的社交圈中推广我们的 网站 有很大帮助。今天我就以新浪微博和人人网为例,介绍如何设置显示源。设置来源的效果如下图所示,分别是新浪微博和人人网的状态。




首先我们要了解源码展示的原理。众所周知,社交网站一般会将其部分资源对外开放,让开发者利用这个社交平台设计应用,实现互利共赢。应用发送的微博或者状态可以直接显示应用名称作为其来源,如果应用是网站,用户点击来源后可以跳转到我们自己的网站。使用这样的条件,我们可以在人人网和新浪微博上设置显示源。以下操作以已申请并审核的申请为准。如果您还没有申请,请到新浪微博开放平台和人人开放平台申请。
新浪微博的微博发送API比较简单。新浪官方SDK收录发送模块,我们可以直接使用。点击这里下载新浪微博的PHP SDK。下载完成后,打开config.php文件,填写你的APP-ID、APP-SecretKey、callback.php要上传的URL。将所有文件上传到您的 网站 之一的文件夹中,并再次检查数据,特别是如果 callback.php 的 URL 正确。然后我们登录微博开放平台,在具体应用下找到回调地址选项,设置为callback.php的URL。这样,当我们访问该文件夹时,我们就可以登录并发送微博了。博客会使用你的网站作为来源,可以直接链接。
相反,人人的API调用比较麻烦。这里需要说明一下人人API调用的简单流程。首先我们告知人人应用的名称和需要的权限,人人提供了一个登录界面供用户登录,用户登录后,按照我们刚刚申请的权限进行授权。如果授权成功,会通知人人,人人会返回一个代码。我们将此代码交换为人人公司的 access_token。之后,有了这个access_key,我们就可以调用人人提供的API进行权限内的操作了。人人网提供了相关的SDK,但是我下载下来看了之后发现这个PHP SDK真的很臃肿,语法错误很多。几次修改后,还是编译不通过,所以这里需要我们自己写文件。调用 API。说到这里,我不得不抱怨。几个月前,我很好地使用了 API 的 1.0 版本。最近两个月,大家突然升级了版本,所以我所有的API都要返工了。写。 . . =_=^!!!好了,不说这个了,看代码吧:
1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /><br />
将脚本保存到你的网站并设置为renren.php,登录后,发送状态的API调用就完成了。本次发送的状态会显示来自XX网站的来源提示,点击跳转到我们的网站,达到宣传的目的。
其他社交网站,比如搜狐微博、腾讯微博,甚至Twitter和Facebook,都是类似的。如果需要搭建应用,可以直接阅读开放平台提供的文档,即使是PHP小白(或者其他语言)也可以轻松编写我们需要的功能。
网站调用新浪微博内容(Python爬取新浪微博内容 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 46 次浏览 • 2022-03-22 13:05
)
用Python编写爬虫爬取微博大V的微博内容,本文以女神微博为例(爬取新浪m站:)
一般来说,爬虫爬取网站,首先选择m站,其次是wap站,最后考虑PC站。当然,这也不是绝对的,有时候PC站的资料最全,你只需要所有的资料,那么PC站就是你的首选。一般m站都是以m开头后跟一个域名,所以本文的网址是。
前期准备
1.代理IP
网上有很多免费的代理IP,比如西双的免费代理IP,你可以自己找一个可以用来测试的;
2.抓包分析
通过抓包获取微博内容地址。我不会在这里详细介绍。不明白的可以自行百度查找相关资料。完整代码直接在下面
完整代码:
# -*- coding: utf-8 -*-
import urllib.request
import json
#定义要爬取的微博大V的微博ID
id='1259110474'
#设置代理IP
proxy_addr="122.241.72.191:808"
#定义页面打开函数
def use_proxy(url,proxy_addr):
req=urllib.request.Request(url)
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")
proxy=urllib.request.ProxyHandler({'http':proxy_addr})
opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
data=urllib.request.urlopen(req).read().decode('utf-8','ignore')
return data
#获取微博主页的containerid,爬取微博内容时需要此id
def get_containerid(url):
data=use_proxy(url,proxy_addr)
content=json.loads(data).get('data')
for data in content.get('tabsInfo').get('tabs'):
if(data.get('tab_type')=='weibo'):
containerid=data.get('containerid')
return containerid
#获取微博大V账号的用户基本信息,如:微博昵称、微博地址、微博头像、关注人数、粉丝数、性别、等级等
def get_userInfo(id):
url='https://m.weibo.cn/api/contain ... %2Bid
data=use_proxy(url,proxy_addr)
content=json.loads(data).get('data')
profile_image_url=content.get('userInfo').get('profile_image_url')
description=content.get('userInfo').get('description')
profile_url=content.get('userInfo').get('profile_url')
verified=content.get('userInfo').get('verified')
guanzhu=content.get('userInfo').get('follow_count')
name=content.get('userInfo').get('screen_name')
fensi=content.get('userInfo').get('followers_count')
gender=content.get('userInfo').get('gender')
urank=content.get('userInfo').get('urank')
print("微博昵称:"+name+"\n"+"微博主页地址:"+profile_url+"\n"+"微博头像地址:"+profile_image_url+"\n"+"是否认证:"+str(verified)+"\n"+"微博说明:"+description+"\n"+"关注人数:"+str(guanzhu)+"\n"+"粉丝数:"+str(fensi)+"\n"+"性别:"+gender+"\n"+"微博等级:"+str(urank)+"\n")
#获取微博内容信息,并保存到文本中,内容包括:每条微博的内容、微博详情页面地址、点赞数、评论数、转发数等
def get_weibo(id,file):
i=1
while True:
url='https://m.weibo.cn/api/contain ... %2Bid
weibo_url='https://m.weibo.cn/api/contain ... nerid(url)+'&page='+str(i)
try:
data=use_proxy(weibo_url,proxy_addr)
content=json.loads(data).get('data')
cards=content.get('cards')
if(len(cards)>0):
for j in range(len(cards)):
print("-----正在爬取第"+str(i)+"页,第"+str(j)+"条微博------")
card_type=cards[j].get('card_type')
if(card_type==9):
mblog=cards[j].get('mblog')
attitudes_count=mblog.get('attitudes_count')
comments_count=mblog.get('comments_count')
created_at=mblog.get('created_at')
reposts_count=mblog.get('reposts_count')
scheme=cards[j].get('scheme')
text=mblog.get('text')
with open(file,'a',encoding='utf-8') as fh:
fh.write("----第"+str(i)+"页,第"+str(j)+"条微博----"+"\n")
fh.write("微博地址:"+str(scheme)+"\n"+"发布时间:"+str(created_at)+"\n"+"微博内容:"+text+"\n"+"点赞数:"+str(attitudes_count)+"\n"+"评论数:"+str(comments_count)+"\n"+"转发数:"+str(reposts_count)+"\n")
i+=1
else:
break
except Exception as e:
print(e)
pass
if __name__=="__main__":
file=id+".txt"
get_userInfo(id)
get_weibo(id,file)
抓取结果
查看全部
网站调用新浪微博内容(Python爬取新浪微博内容
)
用Python编写爬虫爬取微博大V的微博内容,本文以女神微博为例(爬取新浪m站:)
一般来说,爬虫爬取网站,首先选择m站,其次是wap站,最后考虑PC站。当然,这也不是绝对的,有时候PC站的资料最全,你只需要所有的资料,那么PC站就是你的首选。一般m站都是以m开头后跟一个域名,所以本文的网址是。
前期准备
1.代理IP
网上有很多免费的代理IP,比如西双的免费代理IP,你可以自己找一个可以用来测试的;
2.抓包分析
通过抓包获取微博内容地址。我不会在这里详细介绍。不明白的可以自行百度查找相关资料。完整代码直接在下面
完整代码:
# -*- coding: utf-8 -*-
import urllib.request
import json
#定义要爬取的微博大V的微博ID
id='1259110474'
#设置代理IP
proxy_addr="122.241.72.191:808"
#定义页面打开函数
def use_proxy(url,proxy_addr):
req=urllib.request.Request(url)
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")
proxy=urllib.request.ProxyHandler({'http':proxy_addr})
opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
data=urllib.request.urlopen(req).read().decode('utf-8','ignore')
return data
#获取微博主页的containerid,爬取微博内容时需要此id
def get_containerid(url):
data=use_proxy(url,proxy_addr)
content=json.loads(data).get('data')
for data in content.get('tabsInfo').get('tabs'):
if(data.get('tab_type')=='weibo'):
containerid=data.get('containerid')
return containerid
#获取微博大V账号的用户基本信息,如:微博昵称、微博地址、微博头像、关注人数、粉丝数、性别、等级等
def get_userInfo(id):
url='https://m.weibo.cn/api/contain ... %2Bid
data=use_proxy(url,proxy_addr)
content=json.loads(data).get('data')
profile_image_url=content.get('userInfo').get('profile_image_url')
description=content.get('userInfo').get('description')
profile_url=content.get('userInfo').get('profile_url')
verified=content.get('userInfo').get('verified')
guanzhu=content.get('userInfo').get('follow_count')
name=content.get('userInfo').get('screen_name')
fensi=content.get('userInfo').get('followers_count')
gender=content.get('userInfo').get('gender')
urank=content.get('userInfo').get('urank')
print("微博昵称:"+name+"\n"+"微博主页地址:"+profile_url+"\n"+"微博头像地址:"+profile_image_url+"\n"+"是否认证:"+str(verified)+"\n"+"微博说明:"+description+"\n"+"关注人数:"+str(guanzhu)+"\n"+"粉丝数:"+str(fensi)+"\n"+"性别:"+gender+"\n"+"微博等级:"+str(urank)+"\n")
#获取微博内容信息,并保存到文本中,内容包括:每条微博的内容、微博详情页面地址、点赞数、评论数、转发数等
def get_weibo(id,file):
i=1
while True:
url='https://m.weibo.cn/api/contain ... %2Bid
weibo_url='https://m.weibo.cn/api/contain ... nerid(url)+'&page='+str(i)
try:
data=use_proxy(weibo_url,proxy_addr)
content=json.loads(data).get('data')
cards=content.get('cards')
if(len(cards)>0):
for j in range(len(cards)):
print("-----正在爬取第"+str(i)+"页,第"+str(j)+"条微博------")
card_type=cards[j].get('card_type')
if(card_type==9):
mblog=cards[j].get('mblog')
attitudes_count=mblog.get('attitudes_count')
comments_count=mblog.get('comments_count')
created_at=mblog.get('created_at')
reposts_count=mblog.get('reposts_count')
scheme=cards[j].get('scheme')
text=mblog.get('text')
with open(file,'a',encoding='utf-8') as fh:
fh.write("----第"+str(i)+"页,第"+str(j)+"条微博----"+"\n")
fh.write("微博地址:"+str(scheme)+"\n"+"发布时间:"+str(created_at)+"\n"+"微博内容:"+text+"\n"+"点赞数:"+str(attitudes_count)+"\n"+"评论数:"+str(comments_count)+"\n"+"转发数:"+str(reposts_count)+"\n")
i+=1
else:
break
except Exception as e:
print(e)
pass
if __name__=="__main__":
file=id+".txt"
get_userInfo(id)
get_weibo(id,file)
抓取结果
网站调用新浪微博内容(新浪微博短地址接口(API)的简单接入 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 58 次浏览 • 2022-03-22 13:03
)
在短地址(也称为短链接、缩短地址等)方面,twitter发展起来后,还在不断发展,很多互联网网站使用短地址,很多在国内和在国外,但稳定稳定的可靠性在国内还是比较靠谱的。我不怕没有墙。几家外国公司已经遭遇了悲剧。因此,如果项目中使用短地址,我还是推荐使用新浪或其他国内短链接服务。
新浪微博短链接API开放,腾讯微博短地址API未开放。本想通过不同的途径获取腾讯微博API,但以失败告终。新浪微博短地址API不需要用户登录,直接调用即可,速度非常快。以下代码来源于网站,使用CURL POST方式供参考。
新浪微博短链接API文档在旧版开发文档中,新版中没有添加:
function shortenSinaUrl(long_url){apiKey='1234567890';//这里是你申请的应用的API KEY,随便写个应用名就会自动分配给你
apiUrl='http://api.t.sina.com.cn/short_url/shorten.json?source='.apiKey.'&url_long='.long_url;curlObj = curl_init();
curl_setopt(curlObj, CURLOPT_URL,apiUrl);
curl_setopt(curlObj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(curlObj, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(curlObj, CURLOPT_HEADER, 0);
curl_setopt(curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
response = curl_exec(curlObj);
curl_close(curlObj);json = json_decode(response);
returnjson[0]->url_short;
}
function expandSinaUrl(short_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/expand.json?source='.apiKey.'&url_short='.short_url;curlObj = curl_init();
curl_setopt(curlObj, CURLOPT_URL,apiUrl);
curl_setopt(curlObj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(curlObj, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(curlObj, CURLOPT_HEADER, 0);
curl_setopt(curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
response = curl_exec(curlObj);
curl_close(curlObj);json = json_decode(response);
returnjson[0]->url_long;
}
参考新浪微博的开发文档,推荐使用get方法获取。那个代码更简单
function shorturl(long_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/shorten.json?source='.apiKey.'&url_long='.long_url;response = file_get_contents(apiUrl);json = json_decode(response);
returnjson[0]->url_short;
}
function expandurl(short_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/expand.json?source='.apiKey.'&url_short='.short_url;response = file_get_contents(apiUrl);json = json_decode(response);
returnjson[0]->url_long;
}
好的,是不是更简单了?
调试上述代码时,需要填写自己的API key,否则无法获取。
特别提醒:短地址服务现在只为已经认证的APP KEY提供服务,刚刚申请的APP KEY会提示没有权限。您可以使用 209678993 和 3818214747 这两个键进行测试。这两个密钥的来源未知,不推荐用于生产。 (谢谢提醒)
jucelin写了一个调试文档,可以测试一下:
多头到空头:://
短到长::///S4bLBm
只有2个参数,type:1表示长转短,2表示短转长,后面的URL就是目标域名。因为懒惰,所以没有错误的判断。新浪微博短地址不支持短地址。短地址也应该以这种方式进行逻辑控制。 (不信可以试试)。
更多关于新浪微博短地址接口的说明,请参考“新浪微博短地址接口”。 查看全部
网站调用新浪微博内容(新浪微博短地址接口(API)的简单接入
)
在短地址(也称为短链接、缩短地址等)方面,twitter发展起来后,还在不断发展,很多互联网网站使用短地址,很多在国内和在国外,但稳定稳定的可靠性在国内还是比较靠谱的。我不怕没有墙。几家外国公司已经遭遇了悲剧。因此,如果项目中使用短地址,我还是推荐使用新浪或其他国内短链接服务。
新浪微博短链接API开放,腾讯微博短地址API未开放。本想通过不同的途径获取腾讯微博API,但以失败告终。新浪微博短地址API不需要用户登录,直接调用即可,速度非常快。以下代码来源于网站,使用CURL POST方式供参考。
新浪微博短链接API文档在旧版开发文档中,新版中没有添加:
function shortenSinaUrl(long_url){apiKey='1234567890';//这里是你申请的应用的API KEY,随便写个应用名就会自动分配给你
apiUrl='http://api.t.sina.com.cn/short_url/shorten.json?source='.apiKey.'&url_long='.long_url;curlObj = curl_init();
curl_setopt(curlObj, CURLOPT_URL,apiUrl);
curl_setopt(curlObj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(curlObj, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(curlObj, CURLOPT_HEADER, 0);
curl_setopt(curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
response = curl_exec(curlObj);
curl_close(curlObj);json = json_decode(response);
returnjson[0]->url_short;
}
function expandSinaUrl(short_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/expand.json?source='.apiKey.'&url_short='.short_url;curlObj = curl_init();
curl_setopt(curlObj, CURLOPT_URL,apiUrl);
curl_setopt(curlObj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(curlObj, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(curlObj, CURLOPT_HEADER, 0);
curl_setopt(curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
response = curl_exec(curlObj);
curl_close(curlObj);json = json_decode(response);
returnjson[0]->url_long;
}
参考新浪微博的开发文档,推荐使用get方法获取。那个代码更简单
function shorturl(long_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/shorten.json?source='.apiKey.'&url_long='.long_url;response = file_get_contents(apiUrl);json = json_decode(response);
returnjson[0]->url_short;
}
function expandurl(short_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/expand.json?source='.apiKey.'&url_short='.short_url;response = file_get_contents(apiUrl);json = json_decode(response);
returnjson[0]->url_long;
}
好的,是不是更简单了?
调试上述代码时,需要填写自己的API key,否则无法获取。
特别提醒:短地址服务现在只为已经认证的APP KEY提供服务,刚刚申请的APP KEY会提示没有权限。您可以使用 209678993 和 3818214747 这两个键进行测试。这两个密钥的来源未知,不推荐用于生产。 (谢谢提醒)
jucelin写了一个调试文档,可以测试一下:
多头到空头:://
短到长::///S4bLBm
只有2个参数,type:1表示长转短,2表示短转长,后面的URL就是目标域名。因为懒惰,所以没有错误的判断。新浪微博短地址不支持短地址。短地址也应该以这种方式进行逻辑控制。 (不信可以试试)。
更多关于新浪微博短地址接口的说明,请参考“新浪微博短地址接口”。
网站调用新浪微博内容(当浏览器向服务器发送请求的时候,发出http请求消息报文)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2022-03-21 23:41
浏览器向服务器发送请求时,发出HTTP请求消息,服务器返回数据时,发出HTTP响应消息。两种类型的消息都由一个起始行、一个消息头、一个指示头结束的空行和一个可选的消息体组成。 http请求消息中,起始行包括请求方法、请求的资源、HTTP协议的版本号,消息头收录各种属性,消息体收录数据,GET请求没有消息体,所以它在邮件标题后的空白行中。没有其他数据。在Http响应消息中,起始行收录HTTP协议版本、HTTP状态码和状态,消息头收录各种属性,消息体收录服务器返回的数据内容。
下图展示了从fiddler捕获的http请求和http响应。 GET请求的内容是空的,所以消息头和消息体后面的空行都是空的。
服务器发送的响应消息如下,浏览器正常接收到服务器发送的http消息
从上面可以看出,在http请求和http响应的头部信息中,cookie是消息头的一个非常重要的属性。
什么是 cookie?
当用户第一次通过浏览器访问域名时,被访问的WEB服务器会向客户端发送数据,维护WEB服务器和客户端之间的状态。这些数据是由 Internet 站点创建的 cookie。存储在用户本地终端上以识别用户身份的数据,cookie中的信息一般都是加密的,cookie存储在缓存或硬盘中,而硬盘是一些小的文本文件,当您访问网站,会读取网站对应的cookie信息,cookie可以有效改善我们的上网体验。一般来说,一旦 cookie 保存在您的计算机上,它就只能由创建 cookie 的 网站 读取。
为什么需要 cookie
Http 协议是一种无状态的面向连接的协议。 Http协议基于tcp/ip协议层。客户端与服务器建立连接后,它们之间的 TCP 连接始终保持不变。至于保持时间有多长,由服务器端设置。当客户端再次访问服务器时,会继续使用上次建立的连接。但是,由于Http协议是无状态的,WEB服务器并不知道这一点。两个请求是否是同一个客户端,这两个请求是独立的。为了解决这个问题,web程序引入了cookie机制来维护状态。 cookie 可以记录用户的登录状态。通常,Web服务器会在用户登录成功后进行签名,以标记会话的有效性,这样可以多次节省用户。验证并登录 网站。记录用户的访问状态。
cookie 的类型
会话Cookie(Session Cookie):这种类型的cookie只在会话期间有效,存储在浏览器的缓存中。当用户访问网站时,会创建一个会话cookie,当浏览器关闭时,会被浏览器移除。
持久性Cookie(Persistent Cookie):这种类型的cookie在用户会话中长期有效。当您将 cookie 的属性 Max-Age 设置为 1 个月时,该 cookie 将收录在该月相关 URL 的每个 http 请求中。所以它可以记录很多用户初始化或者自定义的信息,比如第一次登录的时间,弱登录的状态等。
Secure cookie:Secure cookie是https访问下的cookie形式,保证cookie在从客户端传递到服务器的过程中始终被加密。
HttpOnly Cookie:这种类型的cookie只能在http(https)请求上传递,对客户端脚本语言无效,从而有效避免跨站攻击。
第三方cookie:第一方cookie是在当前访问的域名或子域下生成的cookie。
第三方 cookie:第三方 cookie 是由第三方域创建的 cookie。
饼干成分
Cookie是HTTP消息头中的一个属性,包括:Cookie名称(Name)、Cookie值(Value)、Cookie过期时间(Expires/Max-Age)、Cookie函数路径(Path)、 cookie 位于(域),使用 cookie 进行安全连接(安全)。
前两个参数是cookie应用的必要条件。此外,还包括cookie大小(大小,不同浏览器对cookie的数量和大小有不同的限制)。
python模拟登录
设置一个cookie处理对象,负责给http请求添加cookie,可以从http响应中获取cookie,向网站登录页面发送请求,包括登录url、POST请求数据,Http头使用urllib2.urlopen发送请求,接收WEB服务器的Response。
首先我们看登录页面源码
当我们使用urllib处理url的时候,实际上是通过urllib2.OpenerDirector的实例来工作的,它会自己调用资源来执行各种操作,比如传递协议、打开url、处理cookie等。而urlopen 方法使用默认打开器来处理问题,基本的 urlopen() 函数不支持身份验证、cookie 或其他高级 HTTP 函数。要支持这些功能,您必须使用 build_opener() 函数来创建您自己的自定义 Opener 对象。
cookielib 模块定义了自动处理 HTTP cookie 的类,并用于访问那些需要 cookie 数据的类网站。 cookielib 模块包括 CookieJar、FileCookieJar、CookiePolicy、DefaultCookiePolicy、Cookie 以及 FileCookieJar 的子类 MozillaCookieJar 和 LWPCookieJar,CookieJar 对象可以管理 HTTP cookie,向 http 请求添加 cookie,以及从 http 响应中获取 cookie。 FileCookieJar 对象主要是从文件中读取cookies或者创建cookies。其中,MozillaCookieJar 用于在 Mozilla 浏览器中创建 cookies.txt。兼容FileCookieJar实例,LWPCookieJar就是创建一个兼容libwww-perl的Set-Cookie3文件格式的FileCookieJar实例,用LWPCookieJar保存的cookie文件便于人阅读。默认是 FileCookieJar 没有保存功能,已经实现了 MozillaCookieJar 或 LWPCookieJar。所以你可以使用MozillaCookieJar或者LWPCookieJar来自动实现cookie保存。
[蟒蛇]
#! /usr/bin/env python#coding:utf-8import sysimport reimport urllib2import urllibimport requestsimport cookielib##这段代码用来解决中文报错reload(sys)sys的问题。 setdefaultencoding("utf8")########################################## ########## 登录人人网 loginurl = '#x27;logindomain = '人人网. com'class Login(object): def __init__(self):self.名称=''自己。 passwprd = ''自己。域=''自己。 cj = cookielib。 LWPCookieJar() 自我。开瓶器=urllib2。 build_opener(urllib2.HTTPCookieProcessor(self.
cj))urllib2. install_opener(self.opener) def setLoginInfo(self,username,password,domain):'''''设置用户登录信息'''self.名称 = 用户名自己。密码=密码自己。 domain = domain def login(self):'''''login网站'''loginparams = {'domain':self.域,'电子邮件':自己。名称,“密码”:自我。 pwd}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.
0.1650.57 Safari/537.36'}req = urllib2.请求(登录网址,urllib.urlencode(登录参数),标头=标头)响应= urllib2。 urlopen(req)self.操作=自我。开瓶器。打开(请求)页面=响应。 read()if __name__ == '__main__': userlogin = Login() username = 'username' password = 'password' domain = logindomain userlogin. setLoginInfo(username,password,domain) 用户登录。 login() 模拟登录新浪微博(Python)
PC登录新浪微博时,用户名和密码在客户端用js预加密,一组参数在POST之前是GET,也是POST_DATA的一部分。这样一来,就无法以通常的简单方式来模拟一个 POST 登录(如人人网)。由于使用API获取部分要使用的微博数据不方便,所以需要自己写一个小爬虫,模拟登录必不可少。琢磨了一下这件事,终于成功登录了。 1、在提交POST请求之前,需要GET获取两个参数。地址为:(v1.3.18) 得到的数据中收录“servertime”和“nonce”的值,都是随机的,其他的值好像2、通过httpfox观察POST数据,参数比较复杂,其中“su”为加密后的用户名,“sp”为加密后的密码,“servertime”和“nonce”都是上一步得到的。其他参数不变,BASE64计算: username = base64.encodestring( urllib.quote(username) )[:-1];密码经过SHA1 3次加密,加上servertime和nonce的值干扰。
即:经过两次SHA1加密后,将servertime和nonce的值加到结果中,再次进行SHA1计算。组织好参数,POST请求。在此之后,登录并没有成功。 POST后得到的内容收录语句location.replace(";callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4 %ED%CE%F3");这是登录失败时的结果,和登录成功后的结果类似,只不过retcode的值为0。接下来再次请求这个URL,这样就可以成功登录微博了。记得提前建好缓存。这是完整的代码(未注释,只是看看):#! /usr/bin/env python#coding=utf8import urllibimport urllib2import cookielibimport base64import reimport jsonimport hashlibcj = cookielib.LWPCookieJar()cookie_support = urllib2.HTTPCookieProcessor(cj)opener = urllib2.build_opener(cookie_support, urllib< @2.HTTPHandler)urllib2.install_opener(opener)postdata = {'entry':'weibo','gateway':'1','from':'','savestate':'7', 'userticket':'1','ssosimplelogin':'1','vsnf':'1','vsnval':'','su':'','service':'miniblog','servertime': '','nonce': '','pwencode': 'wsse','sp': '','encoding': 'UTF-8' ,'url': '#x27;,'returntype': 'META '}def get_servertime():url = '(v1.3.18)&_=39'data = urllib2.urlopen(url).read()p =桩('\((.*)\)')try:json_data = p.search(data).group(1)data = json .loads(json_data)servertime = str(data['servertime']) nonce = data['nonce']return servertime, nonceexcept:print 'Get severtime error!'return Nonedef get_pwd(pwd, servertime, nonce):pwd1 = hashlib .sha1(pwd).hexdige st()pwd2 = hash lib.sha1(pwd1).hexdigest()pwd3_ = pwd2 + servertime + noncepwd3 = hashlib.sha1(pwd3_).hexdigest()return pwd3def get_user(username):username_ = urllib.quote(username)username = base64.encodestring(username_)[:-1]return usernamedef login():username = '你的登录邮箱' pwd = '你的密码' url = '(v1. 3. 18)'try:servertime, nonce = get_servertime()except:returnglobal postdatapostdata['servertime'] = servertimepostdata['nonce'] = noncepostdata['su'] = get_user(username)postdata ['sp'] = get_pwd(pwd, servertime, nonce)postdata = urllib.urlencode(postdata)headers = {'User-Agent':'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0'}req = urllib2.Request(url=url,data=postdata,headers=headers)result=urllib 2.@ >urlopen(req)text = result.read()p = pile('location\.replace\(\'(.*?)\'\)')try:login_url = p.search(text) .group(1)#print login_urlurllib2.urlopen(login_url)print "登录成功!"except:print '登录错误!'login()
以上是使用POST用户名/密码等参数(加密)并保存cookies模拟登录的方法。
一般来说,为了保证安全,网站会定期更新登录的详细信息,比如修改参数名,更新加密(hash)算法等。因此,模拟登录的代码肯定会定期失败,但如果 网站 没有进行大更新,它仍然可以使用,只需稍作改动。此外,处理验证码的难度更大。虽然该程序在一定程度上可以识别验证码字符,但目前很难找到一个简单通用的验证码识别程序。
很多豆友反映需要模拟登录新浪微博获取数据。其实对于一般的微博数据获取,比如用户信息、微博内容等,使用微博开放平台API是更明智的选择:速度更快,节省了大量的网页处理工作量。对于不开放API的数据,我们采用模拟登录的方式。熟悉网络的朋友只要定期维护模拟登录的代码,总能成功登录微博。如果不是那么熟悉,其实可以用一个比较天真的思路来解决:直接把cookie发到新浪微博,实现模拟登录。 1. 获取cookies非常简单。您可以通过Chrome浏览器的“开发者工具”或火狐浏览器的“HTTPFOX”等插件直接查看您的新浪微博cookies。 (注意:不要泄露这个私有 cookie!)
比如Chrome视图cookies(快捷键F12可以调出chrome开发者工具)
chrome 中的 cookie
2、提交cookie作为访问微博的header参数 headers = {'cookie': 'your cookie'}req = urllib2.Request(url, headers=headers) #每次访问页面,带上 headers 参数 r = urllib2.urlopen(req) 看具体代码:
本文分享自微信公众号-大数据挖掘DT数据分析(datadw)
原文出处及转载信息在文中有详述。如有侵权,请联系我们删除。 查看全部
网站调用新浪微博内容(当浏览器向服务器发送请求的时候,发出http请求消息报文)
浏览器向服务器发送请求时,发出HTTP请求消息,服务器返回数据时,发出HTTP响应消息。两种类型的消息都由一个起始行、一个消息头、一个指示头结束的空行和一个可选的消息体组成。 http请求消息中,起始行包括请求方法、请求的资源、HTTP协议的版本号,消息头收录各种属性,消息体收录数据,GET请求没有消息体,所以它在邮件标题后的空白行中。没有其他数据。在Http响应消息中,起始行收录HTTP协议版本、HTTP状态码和状态,消息头收录各种属性,消息体收录服务器返回的数据内容。
下图展示了从fiddler捕获的http请求和http响应。 GET请求的内容是空的,所以消息头和消息体后面的空行都是空的。
服务器发送的响应消息如下,浏览器正常接收到服务器发送的http消息
从上面可以看出,在http请求和http响应的头部信息中,cookie是消息头的一个非常重要的属性。
什么是 cookie?
当用户第一次通过浏览器访问域名时,被访问的WEB服务器会向客户端发送数据,维护WEB服务器和客户端之间的状态。这些数据是由 Internet 站点创建的 cookie。存储在用户本地终端上以识别用户身份的数据,cookie中的信息一般都是加密的,cookie存储在缓存或硬盘中,而硬盘是一些小的文本文件,当您访问网站,会读取网站对应的cookie信息,cookie可以有效改善我们的上网体验。一般来说,一旦 cookie 保存在您的计算机上,它就只能由创建 cookie 的 网站 读取。
为什么需要 cookie
Http 协议是一种无状态的面向连接的协议。 Http协议基于tcp/ip协议层。客户端与服务器建立连接后,它们之间的 TCP 连接始终保持不变。至于保持时间有多长,由服务器端设置。当客户端再次访问服务器时,会继续使用上次建立的连接。但是,由于Http协议是无状态的,WEB服务器并不知道这一点。两个请求是否是同一个客户端,这两个请求是独立的。为了解决这个问题,web程序引入了cookie机制来维护状态。 cookie 可以记录用户的登录状态。通常,Web服务器会在用户登录成功后进行签名,以标记会话的有效性,这样可以多次节省用户。验证并登录 网站。记录用户的访问状态。
cookie 的类型
会话Cookie(Session Cookie):这种类型的cookie只在会话期间有效,存储在浏览器的缓存中。当用户访问网站时,会创建一个会话cookie,当浏览器关闭时,会被浏览器移除。
持久性Cookie(Persistent Cookie):这种类型的cookie在用户会话中长期有效。当您将 cookie 的属性 Max-Age 设置为 1 个月时,该 cookie 将收录在该月相关 URL 的每个 http 请求中。所以它可以记录很多用户初始化或者自定义的信息,比如第一次登录的时间,弱登录的状态等。
Secure cookie:Secure cookie是https访问下的cookie形式,保证cookie在从客户端传递到服务器的过程中始终被加密。
HttpOnly Cookie:这种类型的cookie只能在http(https)请求上传递,对客户端脚本语言无效,从而有效避免跨站攻击。
第三方cookie:第一方cookie是在当前访问的域名或子域下生成的cookie。
第三方 cookie:第三方 cookie 是由第三方域创建的 cookie。
饼干成分
Cookie是HTTP消息头中的一个属性,包括:Cookie名称(Name)、Cookie值(Value)、Cookie过期时间(Expires/Max-Age)、Cookie函数路径(Path)、 cookie 位于(域),使用 cookie 进行安全连接(安全)。
前两个参数是cookie应用的必要条件。此外,还包括cookie大小(大小,不同浏览器对cookie的数量和大小有不同的限制)。
python模拟登录
设置一个cookie处理对象,负责给http请求添加cookie,可以从http响应中获取cookie,向网站登录页面发送请求,包括登录url、POST请求数据,Http头使用urllib2.urlopen发送请求,接收WEB服务器的Response。
首先我们看登录页面源码
当我们使用urllib处理url的时候,实际上是通过urllib2.OpenerDirector的实例来工作的,它会自己调用资源来执行各种操作,比如传递协议、打开url、处理cookie等。而urlopen 方法使用默认打开器来处理问题,基本的 urlopen() 函数不支持身份验证、cookie 或其他高级 HTTP 函数。要支持这些功能,您必须使用 build_opener() 函数来创建您自己的自定义 Opener 对象。
cookielib 模块定义了自动处理 HTTP cookie 的类,并用于访问那些需要 cookie 数据的类网站。 cookielib 模块包括 CookieJar、FileCookieJar、CookiePolicy、DefaultCookiePolicy、Cookie 以及 FileCookieJar 的子类 MozillaCookieJar 和 LWPCookieJar,CookieJar 对象可以管理 HTTP cookie,向 http 请求添加 cookie,以及从 http 响应中获取 cookie。 FileCookieJar 对象主要是从文件中读取cookies或者创建cookies。其中,MozillaCookieJar 用于在 Mozilla 浏览器中创建 cookies.txt。兼容FileCookieJar实例,LWPCookieJar就是创建一个兼容libwww-perl的Set-Cookie3文件格式的FileCookieJar实例,用LWPCookieJar保存的cookie文件便于人阅读。默认是 FileCookieJar 没有保存功能,已经实现了 MozillaCookieJar 或 LWPCookieJar。所以你可以使用MozillaCookieJar或者LWPCookieJar来自动实现cookie保存。
[蟒蛇]
#! /usr/bin/env python#coding:utf-8import sysimport reimport urllib2import urllibimport requestsimport cookielib##这段代码用来解决中文报错reload(sys)sys的问题。 setdefaultencoding("utf8")########################################## ########## 登录人人网 loginurl = '#x27;logindomain = '人人网. com'class Login(object): def __init__(self):self.名称=''自己。 passwprd = ''自己。域=''自己。 cj = cookielib。 LWPCookieJar() 自我。开瓶器=urllib2。 build_opener(urllib2.HTTPCookieProcessor(self.
cj))urllib2. install_opener(self.opener) def setLoginInfo(self,username,password,domain):'''''设置用户登录信息'''self.名称 = 用户名自己。密码=密码自己。 domain = domain def login(self):'''''login网站'''loginparams = {'domain':self.域,'电子邮件':自己。名称,“密码”:自我。 pwd}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.
0.1650.57 Safari/537.36'}req = urllib2.请求(登录网址,urllib.urlencode(登录参数),标头=标头)响应= urllib2。 urlopen(req)self.操作=自我。开瓶器。打开(请求)页面=响应。 read()if __name__ == '__main__': userlogin = Login() username = 'username' password = 'password' domain = logindomain userlogin. setLoginInfo(username,password,domain) 用户登录。 login() 模拟登录新浪微博(Python)
PC登录新浪微博时,用户名和密码在客户端用js预加密,一组参数在POST之前是GET,也是POST_DATA的一部分。这样一来,就无法以通常的简单方式来模拟一个 POST 登录(如人人网)。由于使用API获取部分要使用的微博数据不方便,所以需要自己写一个小爬虫,模拟登录必不可少。琢磨了一下这件事,终于成功登录了。 1、在提交POST请求之前,需要GET获取两个参数。地址为:(v1.3.18) 得到的数据中收录“servertime”和“nonce”的值,都是随机的,其他的值好像2、通过httpfox观察POST数据,参数比较复杂,其中“su”为加密后的用户名,“sp”为加密后的密码,“servertime”和“nonce”都是上一步得到的。其他参数不变,BASE64计算: username = base64.encodestring( urllib.quote(username) )[:-1];密码经过SHA1 3次加密,加上servertime和nonce的值干扰。
即:经过两次SHA1加密后,将servertime和nonce的值加到结果中,再次进行SHA1计算。组织好参数,POST请求。在此之后,登录并没有成功。 POST后得到的内容收录语句location.replace(";callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4 %ED%CE%F3");这是登录失败时的结果,和登录成功后的结果类似,只不过retcode的值为0。接下来再次请求这个URL,这样就可以成功登录微博了。记得提前建好缓存。这是完整的代码(未注释,只是看看):#! /usr/bin/env python#coding=utf8import urllibimport urllib2import cookielibimport base64import reimport jsonimport hashlibcj = cookielib.LWPCookieJar()cookie_support = urllib2.HTTPCookieProcessor(cj)opener = urllib2.build_opener(cookie_support, urllib< @2.HTTPHandler)urllib2.install_opener(opener)postdata = {'entry':'weibo','gateway':'1','from':'','savestate':'7', 'userticket':'1','ssosimplelogin':'1','vsnf':'1','vsnval':'','su':'','service':'miniblog','servertime': '','nonce': '','pwencode': 'wsse','sp': '','encoding': 'UTF-8' ,'url': '#x27;,'returntype': 'META '}def get_servertime():url = '(v1.3.18)&_=39'data = urllib2.urlopen(url).read()p =桩('\((.*)\)')try:json_data = p.search(data).group(1)data = json .loads(json_data)servertime = str(data['servertime']) nonce = data['nonce']return servertime, nonceexcept:print 'Get severtime error!'return Nonedef get_pwd(pwd, servertime, nonce):pwd1 = hashlib .sha1(pwd).hexdige st()pwd2 = hash lib.sha1(pwd1).hexdigest()pwd3_ = pwd2 + servertime + noncepwd3 = hashlib.sha1(pwd3_).hexdigest()return pwd3def get_user(username):username_ = urllib.quote(username)username = base64.encodestring(username_)[:-1]return usernamedef login():username = '你的登录邮箱' pwd = '你的密码' url = '(v1. 3. 18)'try:servertime, nonce = get_servertime()except:returnglobal postdatapostdata['servertime'] = servertimepostdata['nonce'] = noncepostdata['su'] = get_user(username)postdata ['sp'] = get_pwd(pwd, servertime, nonce)postdata = urllib.urlencode(postdata)headers = {'User-Agent':'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0'}req = urllib2.Request(url=url,data=postdata,headers=headers)result=urllib 2.@ >urlopen(req)text = result.read()p = pile('location\.replace\(\'(.*?)\'\)')try:login_url = p.search(text) .group(1)#print login_urlurllib2.urlopen(login_url)print "登录成功!"except:print '登录错误!'login()
以上是使用POST用户名/密码等参数(加密)并保存cookies模拟登录的方法。
一般来说,为了保证安全,网站会定期更新登录的详细信息,比如修改参数名,更新加密(hash)算法等。因此,模拟登录的代码肯定会定期失败,但如果 网站 没有进行大更新,它仍然可以使用,只需稍作改动。此外,处理验证码的难度更大。虽然该程序在一定程度上可以识别验证码字符,但目前很难找到一个简单通用的验证码识别程序。
很多豆友反映需要模拟登录新浪微博获取数据。其实对于一般的微博数据获取,比如用户信息、微博内容等,使用微博开放平台API是更明智的选择:速度更快,节省了大量的网页处理工作量。对于不开放API的数据,我们采用模拟登录的方式。熟悉网络的朋友只要定期维护模拟登录的代码,总能成功登录微博。如果不是那么熟悉,其实可以用一个比较天真的思路来解决:直接把cookie发到新浪微博,实现模拟登录。 1. 获取cookies非常简单。您可以通过Chrome浏览器的“开发者工具”或火狐浏览器的“HTTPFOX”等插件直接查看您的新浪微博cookies。 (注意:不要泄露这个私有 cookie!)
比如Chrome视图cookies(快捷键F12可以调出chrome开发者工具)
chrome 中的 cookie
2、提交cookie作为访问微博的header参数 headers = {'cookie': 'your cookie'}req = urllib2.Request(url, headers=headers) #每次访问页面,带上 headers 参数 r = urllib2.urlopen(req) 看具体代码:
本文分享自微信公众号-大数据挖掘DT数据分析(datadw)
原文出处及转载信息在文中有详述。如有侵权,请联系我们删除。
网站调用新浪微博内容( 织梦cms站点内容自动更新到新浪微博推荐学习:htm主页模板 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 221 次浏览 • 2022-03-21 20:07
织梦cms站点内容自动更新到新浪微博推荐学习:htm主页模板
)
DEDEcms网站内容如何自动更新到新浪微博?
DEDEcms网站内容自动更新到新浪微博
推荐学习:织梦cms
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。
以上就是DEDEcms网站内容如何自动更新到新浪微博的详细内容。更多详情请关注php中文网其他相关话题文章!
查看全部
网站调用新浪微博内容(
织梦cms站点内容自动更新到新浪微博推荐学习:htm主页模板
)

DEDEcms网站内容如何自动更新到新浪微博?
DEDEcms网站内容自动更新到新浪微博
推荐学习:织梦cms
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。
以上就是DEDEcms网站内容如何自动更新到新浪微博的详细内容。更多详情请关注php中文网其他相关话题文章!

网站调用新浪微博内容( 织梦DEDECMS站点内容自动更新到新浪微博推荐学习:htm主页模板 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-03-21 19:41
织梦DEDECMS站点内容自动更新到新浪微博推荐学习:htm主页模板
)
织梦如何将网站内容自动更新到新浪微博?
织梦DEDEcms网站内容自动更新到新浪微博
推荐学习:织梦cms
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。
以上就是织梦网站内容如何自动更新到新浪微博的详细内容。更多详情请关注php中文网其他相关话题文章!
查看全部
网站调用新浪微博内容(
织梦DEDECMS站点内容自动更新到新浪微博推荐学习:htm主页模板
)

织梦如何将网站内容自动更新到新浪微博?
织梦DEDEcms网站内容自动更新到新浪微博
推荐学习:织梦cms
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。
以上就是织梦网站内容如何自动更新到新浪微博的详细内容。更多详情请关注php中文网其他相关话题文章!

网站调用新浪微博内容(使用PHP获取最新微博的函数为__get_weibo)
网站优化 • 优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-03-21 05:13
最近发现推特上的朋友越来越冷清了,大家都无奈的开始使用新浪微博,但是新浪没有开发也没有开放API,这让大家很郁闷。这是我写的一个PHP小函数,可以帮助你在自己的网站上显示和输出最新更新的微博内容。使用PHP获取最新微博的函数是any_get_weibo($sinaId, $listNs) 参数是你的新浪微博 博客号ID和要显示的微博条数,由于新浪小部件的限制,条目不能超过 15...
具体代码如下:
函数 any_get_weibo($sinaId, $listNs){ $output = ''; $getthtm =file_get_contents(''.$sinaId .''); // 这里从新浪微件调用数据源可以减少一定的数据流量。可以避免跳转到着陆页;$tempOp =explode('', $getthtm); for($n = 1; $n = $listNs; $n++){ $tempTs =explode('
', $tempOp[$n]); $output .= ''.$tempTs[0].'/li>'; } $output .='.$sinaId.'/profile">more.../a >'; return $output; }简单说明:通过上面的函数,可以使用any_get_weibo($sinaId, $listNs)函数直接获取你最新的微博内容,这里$sinaId是你的新浪微博ID ID不是个性化域名中的URL,而是1503269170等数字ID,否则可能无法获取数据。数字ID很容易在“关注”或“关注者”的页面地址的URL中找到; $listNs 是你打算获取多少条微博,由于新浪小部件最多只能输出15条微博,所以这个变量不能超过15,否则无法获取。
展开:另外,你还可以从一个案例中得出推论,使用推特提要地址:anyLiv&rpp=1,还可以获取用户名为anyLiv的最新推文内容。这里的这个小功能只是一个简单的实现。原理是把新浪小部件输出的整个页面拉出来,然后按照一定的规则截取你需要的内容。当然,你可以在自己使用的时候添加一些装饰或者截取输出内容的长度。并使用 &showpic=0 参数来控制图片的显示方式等,这取决于你的需要。 查看全部
网站调用新浪微博内容(使用PHP获取最新微博的函数为__get_weibo)
最近发现推特上的朋友越来越冷清了,大家都无奈的开始使用新浪微博,但是新浪没有开发也没有开放API,这让大家很郁闷。这是我写的一个PHP小函数,可以帮助你在自己的网站上显示和输出最新更新的微博内容。使用PHP获取最新微博的函数是any_get_weibo($sinaId, $listNs) 参数是你的新浪微博 博客号ID和要显示的微博条数,由于新浪小部件的限制,条目不能超过 15...
具体代码如下:
函数 any_get_weibo($sinaId, $listNs){ $output = ''; $getthtm =file_get_contents(''.$sinaId .''); // 这里从新浪微件调用数据源可以减少一定的数据流量。可以避免跳转到着陆页;$tempOp =explode('', $getthtm); for($n = 1; $n = $listNs; $n++){ $tempTs =explode('
', $tempOp[$n]); $output .= ''.$tempTs[0].'/li>'; } $output .='.$sinaId.'/profile">more.../a >'; return $output; }简单说明:通过上面的函数,可以使用any_get_weibo($sinaId, $listNs)函数直接获取你最新的微博内容,这里$sinaId是你的新浪微博ID ID不是个性化域名中的URL,而是1503269170等数字ID,否则可能无法获取数据。数字ID很容易在“关注”或“关注者”的页面地址的URL中找到; $listNs 是你打算获取多少条微博,由于新浪小部件最多只能输出15条微博,所以这个变量不能超过15,否则无法获取。
展开:另外,你还可以从一个案例中得出推论,使用推特提要地址:anyLiv&rpp=1,还可以获取用户名为anyLiv的最新推文内容。这里的这个小功能只是一个简单的实现。原理是把新浪小部件输出的整个页面拉出来,然后按照一定的规则截取你需要的内容。当然,你可以在自己使用的时候添加一些装饰或者截取输出内容的长度。并使用 &showpic=0 参数来控制图片的显示方式等,这取决于你的需要。
网站调用新浪微博内容(新浪微博是:新浪微博同步的步骤和验证机制(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2022-03-20 09:34
最近遇到一个项目,用户的微博信息需要与自己的网站项目同步。好在新浪微博提供了API。我查过了,需要调用信息同步。是的,需要对用户登录进行认证,返回的数据是JSON格式的。
在授权机制的描述中,新浪微博的API中有两种认证机制,分别是:OAuth和Basic Auth。 OAuth 没有仔细研究过,所以忽略它。在Basic Auth授权介绍部分,在cnblogs上提到了一篇文章的文章,这个文章给出了如何以GET方式提交http请求,并给出了返回内容的代码,按照这个文章 然后又找了一篇博文文章:javascript:void(0),这个文章实现了站外发微博的功能。结合这两个文章,实现新浪微博同步功能。
下面介绍实现微博同步的步骤:
1.首先,为了实现http请求,使用System.Net;需要引入命名空间,同时在转换字符集部分和返回内容部分,还需要另外两个命名空间:using System.Text;并使用 System.IO;
然后就可以开始写代码获取json数据了。
(1)准备用户认证数据
string usernamePassword = username + ":" + password;
username是你的微博登录用户名,password是你的博客密码。
(2)准备API的URL。URL中的参数直接以GET的形式附在URL上。一开始的博客园的文章没带一个仔细看,数据里总是返回400错误,后来查了msdn,发现HttpWebRequest的默认请求方式是GET,既然是GET方式,参数应该是URL传的。
string url = "https://api.weibo.com/2/status ... 3B%3B
以上apikey是作为新浪微博用户的开发者申请的,应该是唯一的。博客园里的文章说要发邮件审核。我没有发邮件,直接申请了。拿到APIKEY后也可以同步信息,但是在站外发送微博信息时,来源部分会是:未审核的申请。还有uid、screen_name等参数,具体参数在API文档中有说明。 查看全部
网站调用新浪微博内容(新浪微博是:新浪微博同步的步骤和验证机制(组图))
最近遇到一个项目,用户的微博信息需要与自己的网站项目同步。好在新浪微博提供了API。我查过了,需要调用信息同步。是的,需要对用户登录进行认证,返回的数据是JSON格式的。
在授权机制的描述中,新浪微博的API中有两种认证机制,分别是:OAuth和Basic Auth。 OAuth 没有仔细研究过,所以忽略它。在Basic Auth授权介绍部分,在cnblogs上提到了一篇文章的文章,这个文章给出了如何以GET方式提交http请求,并给出了返回内容的代码,按照这个文章 然后又找了一篇博文文章:javascript:void(0),这个文章实现了站外发微博的功能。结合这两个文章,实现新浪微博同步功能。
下面介绍实现微博同步的步骤:
1.首先,为了实现http请求,使用System.Net;需要引入命名空间,同时在转换字符集部分和返回内容部分,还需要另外两个命名空间:using System.Text;并使用 System.IO;
然后就可以开始写代码获取json数据了。
(1)准备用户认证数据
string usernamePassword = username + ":" + password;
username是你的微博登录用户名,password是你的博客密码。
(2)准备API的URL。URL中的参数直接以GET的形式附在URL上。一开始的博客园的文章没带一个仔细看,数据里总是返回400错误,后来查了msdn,发现HttpWebRequest的默认请求方式是GET,既然是GET方式,参数应该是URL传的。
string url = "https://api.weibo.com/2/status ... 3B%3B
以上apikey是作为新浪微博用户的开发者申请的,应该是唯一的。博客园里的文章说要发邮件审核。我没有发邮件,直接申请了。拿到APIKEY后也可以同步信息,但是在站外发送微博信息时,来源部分会是:未审核的申请。还有uid、screen_name等参数,具体参数在API文档中有说明。
网站调用新浪微博内容(一下怎么模拟登陆新浪微博(图)怎么获取微博数据)
网站优化 • 优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2022-04-06 18:16
最近需要爬取微博数据进行分析。对于新浪微博,官方提供了API,但是有几个致命的限制(调用次数和授权期限的限制),所以我觉得有必要研究爬虫,直接爬取。通过微博获取微博数据的可行性。
由于模拟登陆微博是爬虫抓取微博信息的第一步,下面介绍如何模拟登陆微博(以新浪微博为例)。
这个过程主要分为两个步骤:
1 脚本模拟登陆新浪微博并保存cookies;
2 获得cookie信息后,使用cookie信息直接访问微博url。
其中,第一步是这里讨论的重点。为了更好的模拟这一步,需要一个好的网络监控工具,可以使用火狐的Firebug和Chrome以及IE自带的开发工具(注意IE必须是IE9以上才有监控网络的功能,Chrome的网络交互消息可以在网络部分查看)。另外前两天发现python支持的包很多,用python自定义自己的网络包比较方便,所以这里我用python作为我的开发语言。
好了,先说一下前提工作,下面开始分析用户在登录新浪微博的过程中进行的操作。在下面的例子中,我使用chrome自带的开发者工具作为我的网络包监控工具。
首先打开(如果你设置了浏览器自动记住密码自动登录,需要清除cookie),然后通过网络监控工具,我们会发现在用户登录过程中,浏览器交互与服务器三遍。它们如下:
一、第一个Get请求获取一些参数
在用户名栏输入你的微博账号,然后确认,这时你会发现当你的焦点离开用户名输入框时,浏览器会自动报"callback=sinaSSOController.preloginCallBack&su=&rsakt=mod& checkpin=1&client =ssologin.js (v1.4.5)&_=83” 发送GET请求,如下:
仔细看这个GET请求的响应内容,你会发现这个JSON字符串中收录了几个参数,可能你不知道它们的含义,但是没关系,现在你只需要知道这些参数会在后续处理。能。
二、发送 POST 请求
这部分是整个登录过程的重点。这部分用于向服务器提交用户信息,服务器会判断用户信息是否正确,从而判断登录是否成功。
通过 Chrome 自带的开发者工具,可以观察到 POST 消息的相关信息(url、headers、data)。下图是我的 POST 消息截图:
网址信息如下:
包头信息如下:
POST的消息数据信息如下:
接下来的工作就比较简单了,我们要做的就是模仿上面消息的内容和格式,用python发送类似的消息。在自己自定义类似的消息之前,我觉得有必要简单解释一下上面消息中DATA表单中每一项的含义。
其中,“su”为加密后的用户名,“sp”为加密后的密码。“servertime”、“nonce”和“rsakv”是上一个GET请求返回的JSON字符串的内容。其他参数不变。然后,重点讨论“su”和“sp”的加密算法。
1. "su" 加密算法
su 是 BASE64 计算出来的用户名: su= base64.encodestring( urllib.quote(username) )[:-1];
2. "sp" 加密算法
sp的加密算法可能会经常变化(考虑到网站的安全性,一段时间后登录消息的格式和加密算法发生变化是正常的),目前新浪使用的是RSA算法(如果你比较js 如果你是牛,可以直接去网页源码找它的加密方式,我没找到,参考网上有)。
这里简单介绍一下RSA算法的解密过程。
2.1 安装RSA模块,下载地址为:
2.2 创建一个 rsa 公钥。公钥的两个参数在新浪微博上都给定了固定值,但都是十六进制字符串。第一个是第一步登录的那个。pubkey,第二个是js加密文件中的'10001'。这两个值需要先从十六进制转换为十进制,但也可以在代码中硬编码。我直接写'10001'为65537
rsaPublickey=int(pubkey,16)
key=rsa.PublicKey(rsaPublickey,65537)#创建公钥
message=str(servertime)+'\t'+str(nonce)+'\n'+str(password)#拼接明文js加密文件得到
passwd=rsa.encrypt(message,key)#encryption
passwd=binascii.b2a_hex(passwd)#将加密信息转换为十六进制。
如果上述所有步骤对您来说都顺利,您将收到以下响应:
这是一个自动跳转语句,其中收录要跳转的URL。如果登录正确,则该URL中的德语retcode值为0。否则,登录错误。您需要仔细检查上述步骤。
三、跳转到对应的微博页面
我们已经得到了上面要重定向的 url,所以现在我们只需要请求这个 URL。这里要注意一点,为了让服务器知道你是否登录,这一步的请求需要使用上一步操作的cookie信息(因为第二步登录成功的信息会会自动记录在cookie中),所以我们在整个程序开始时,需要打开cookie,以保证cookie在以后的操作中可以正确使用。同时对于python用户,这一步不要自己自定义header,因为urllib2默认会自动打包cookie信息。如果手动自定义标头,则可能会丢失 cookie 信息。
下面附上我的参考代码:
参考文章:
1、
2、
从: 查看全部
网站调用新浪微博内容(一下怎么模拟登陆新浪微博(图)怎么获取微博数据)
最近需要爬取微博数据进行分析。对于新浪微博,官方提供了API,但是有几个致命的限制(调用次数和授权期限的限制),所以我觉得有必要研究爬虫,直接爬取。通过微博获取微博数据的可行性。
由于模拟登陆微博是爬虫抓取微博信息的第一步,下面介绍如何模拟登陆微博(以新浪微博为例)。
这个过程主要分为两个步骤:
1 脚本模拟登陆新浪微博并保存cookies;
2 获得cookie信息后,使用cookie信息直接访问微博url。
其中,第一步是这里讨论的重点。为了更好的模拟这一步,需要一个好的网络监控工具,可以使用火狐的Firebug和Chrome以及IE自带的开发工具(注意IE必须是IE9以上才有监控网络的功能,Chrome的网络交互消息可以在网络部分查看)。另外前两天发现python支持的包很多,用python自定义自己的网络包比较方便,所以这里我用python作为我的开发语言。
好了,先说一下前提工作,下面开始分析用户在登录新浪微博的过程中进行的操作。在下面的例子中,我使用chrome自带的开发者工具作为我的网络包监控工具。
首先打开(如果你设置了浏览器自动记住密码自动登录,需要清除cookie),然后通过网络监控工具,我们会发现在用户登录过程中,浏览器交互与服务器三遍。它们如下:
一、第一个Get请求获取一些参数
在用户名栏输入你的微博账号,然后确认,这时你会发现当你的焦点离开用户名输入框时,浏览器会自动报"callback=sinaSSOController.preloginCallBack&su=&rsakt=mod& checkpin=1&client =ssologin.js (v1.4.5)&_=83” 发送GET请求,如下:


仔细看这个GET请求的响应内容,你会发现这个JSON字符串中收录了几个参数,可能你不知道它们的含义,但是没关系,现在你只需要知道这些参数会在后续处理。能。
二、发送 POST 请求
这部分是整个登录过程的重点。这部分用于向服务器提交用户信息,服务器会判断用户信息是否正确,从而判断登录是否成功。
通过 Chrome 自带的开发者工具,可以观察到 POST 消息的相关信息(url、headers、data)。下图是我的 POST 消息截图:
网址信息如下:

包头信息如下:

POST的消息数据信息如下:

接下来的工作就比较简单了,我们要做的就是模仿上面消息的内容和格式,用python发送类似的消息。在自己自定义类似的消息之前,我觉得有必要简单解释一下上面消息中DATA表单中每一项的含义。
其中,“su”为加密后的用户名,“sp”为加密后的密码。“servertime”、“nonce”和“rsakv”是上一个GET请求返回的JSON字符串的内容。其他参数不变。然后,重点讨论“su”和“sp”的加密算法。
1. "su" 加密算法
su 是 BASE64 计算出来的用户名: su= base64.encodestring( urllib.quote(username) )[:-1];
2. "sp" 加密算法
sp的加密算法可能会经常变化(考虑到网站的安全性,一段时间后登录消息的格式和加密算法发生变化是正常的),目前新浪使用的是RSA算法(如果你比较js 如果你是牛,可以直接去网页源码找它的加密方式,我没找到,参考网上有)。
这里简单介绍一下RSA算法的解密过程。
2.1 安装RSA模块,下载地址为:
2.2 创建一个 rsa 公钥。公钥的两个参数在新浪微博上都给定了固定值,但都是十六进制字符串。第一个是第一步登录的那个。pubkey,第二个是js加密文件中的'10001'。这两个值需要先从十六进制转换为十进制,但也可以在代码中硬编码。我直接写'10001'为65537
rsaPublickey=int(pubkey,16)
key=rsa.PublicKey(rsaPublickey,65537)#创建公钥
message=str(servertime)+'\t'+str(nonce)+'\n'+str(password)#拼接明文js加密文件得到
passwd=rsa.encrypt(message,key)#encryption
passwd=binascii.b2a_hex(passwd)#将加密信息转换为十六进制。
如果上述所有步骤对您来说都顺利,您将收到以下响应:

这是一个自动跳转语句,其中收录要跳转的URL。如果登录正确,则该URL中的德语retcode值为0。否则,登录错误。您需要仔细检查上述步骤。
三、跳转到对应的微博页面
我们已经得到了上面要重定向的 url,所以现在我们只需要请求这个 URL。这里要注意一点,为了让服务器知道你是否登录,这一步的请求需要使用上一步操作的cookie信息(因为第二步登录成功的信息会会自动记录在cookie中),所以我们在整个程序开始时,需要打开cookie,以保证cookie在以后的操作中可以正确使用。同时对于python用户,这一步不要自己自定义header,因为urllib2默认会自动打包cookie信息。如果手动自定义标头,则可能会丢失 cookie 信息。
下面附上我的参考代码:
参考文章:
1、
2、
从:
网站调用新浪微博内容(Web2.0时代,新浪微博API官方的方式总是显得很麻烦)
网站优化 • 优采云 发表了文章 • 0 个评论 • 169 次浏览 • 2022-04-05 08:15
新浪微博的API官方提供了多种调用方式,支持编程,归根结底有两种:
1.基于 Oauth 协议,使用 Open API。(%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E)
2.使用微博JS-SDK( )。
官方的方式总是显得繁琐。让我们来探索一下,是否可以使用非官方的方法,在没有AppKey、身份验证和Ajax 的情况下,跨域调用新浪微博API?
在Web2.0时代,短链服务非常流行。新浪的短链服务域名是,这个域名真的很短,没办法变短。
打开新浪微博API官方文档,短链服务描述如下:
上面列出的方法调用都是相似的。我们以第一种方法 short_url/shorten 为例。打开详细说明:
我们来分析一下这一段:
1.需要登录:不。这很重要,因为我们不需要登录,我们的“免认证”就可以正常工作。
2.频率限制:是的。这也是很关键的,也就是说如果我们走官方的方式,调用的次数会非常有限。
3.支持的格式:JSON。事实上,根据实验,新浪微博不仅支持JSON,还支持JSONP,但文档并没有告诉我们。这也很关键。因为有JSONP,就意味着可以轻松跨域。
4.网址:. 事实上,这也是一个谎言。HTTPS 肯定会影响速度。经过实验,直接把HTTPS改成HTTP还是可以的。
接下来,一一突破难关。
一、使用JQuery+JSONP跨域。
参考文档:
jquery对JSONP非常友好,调用AJAX时只需指定dataType:jsonp即可。
二是频率限制问题。
由于不需要登录,因此可以绕过频率限制问题。因为 AppKey 本身是半公开的。我们可以轻松地 Google 到一堆很棒的应用程序的 Appkey。
例如:
iPhone新浪微博客户端App Key:5786724301
iPad新浪客户端App Key:2849184197
Google.Nexus Wave 客户端应用密钥:1206405345
周伯通微博经理App Key:202088835
微博应用密钥:211160679
上面列出的 AppKey 都是来自一些拥有大量用户的移动应用程序。它们的频率限制非常宽松,几乎可以理解为“无限制”。为了解决频率限制问题,我们可以使用他们的Appkey。
另外:新浪微博API的频次限制有两个维度,服务IP维度和用户IP维度。. 这与本文无关,因为 Javascript 在客户端运行。但是如果要修改本文中提到的方法,使用C#或其他高级语言在服务器端调用,一定要注意服务器IP维度。
三、一个简单的实验。
浏览器会显示
{"urls":[
{"result":true,"url_short":"http://t.cn/h5FGy","url_long":","type":0}
]}
通过访问上述的地址,您已经得到了的段地址:http://t.cn/h5FGy
注意我们使用的是http而非https,不需要使用https,上文已经提到了。
四、最终代码示例
最终代码的示例参考这里http://haotaoqu.com/item-45.html
这个示例将一个又臭又长的淘宝客URL地址转换为了新浪短地址。
Javascript代码如下:
五、除了short_url/shorten,其他可以用这个方法调用的API
任何标有“login required: no”的接口都可以通过本文的rogue方法调用。打开%E6%96%87%E6%A1%A3_V2的官方文档慢慢选择~ 查看全部
网站调用新浪微博内容(Web2.0时代,新浪微博API官方的方式总是显得很麻烦)
新浪微博的API官方提供了多种调用方式,支持编程,归根结底有两种:
1.基于 Oauth 协议,使用 Open API。(%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E)
2.使用微博JS-SDK( )。
官方的方式总是显得繁琐。让我们来探索一下,是否可以使用非官方的方法,在没有AppKey、身份验证和Ajax 的情况下,跨域调用新浪微博API?
在Web2.0时代,短链服务非常流行。新浪的短链服务域名是,这个域名真的很短,没办法变短。
打开新浪微博API官方文档,短链服务描述如下:

上面列出的方法调用都是相似的。我们以第一种方法 short_url/shorten 为例。打开详细说明:

我们来分析一下这一段:
1.需要登录:不。这很重要,因为我们不需要登录,我们的“免认证”就可以正常工作。
2.频率限制:是的。这也是很关键的,也就是说如果我们走官方的方式,调用的次数会非常有限。
3.支持的格式:JSON。事实上,根据实验,新浪微博不仅支持JSON,还支持JSONP,但文档并没有告诉我们。这也很关键。因为有JSONP,就意味着可以轻松跨域。
4.网址:. 事实上,这也是一个谎言。HTTPS 肯定会影响速度。经过实验,直接把HTTPS改成HTTP还是可以的。
接下来,一一突破难关。
一、使用JQuery+JSONP跨域。
参考文档:
jquery对JSONP非常友好,调用AJAX时只需指定dataType:jsonp即可。
二是频率限制问题。
由于不需要登录,因此可以绕过频率限制问题。因为 AppKey 本身是半公开的。我们可以轻松地 Google 到一堆很棒的应用程序的 Appkey。
例如:
iPhone新浪微博客户端App Key:5786724301
iPad新浪客户端App Key:2849184197
Google.Nexus Wave 客户端应用密钥:1206405345
周伯通微博经理App Key:202088835
微博应用密钥:211160679
上面列出的 AppKey 都是来自一些拥有大量用户的移动应用程序。它们的频率限制非常宽松,几乎可以理解为“无限制”。为了解决频率限制问题,我们可以使用他们的Appkey。
另外:新浪微博API的频次限制有两个维度,服务IP维度和用户IP维度。. 这与本文无关,因为 Javascript 在客户端运行。但是如果要修改本文中提到的方法,使用C#或其他高级语言在服务器端调用,一定要注意服务器IP维度。
三、一个简单的实验。
浏览器会显示
{"urls":[
{"result":true,"url_short":"http://t.cn/h5FGy","url_long":","type":0}
]}
通过访问上述的地址,您已经得到了的段地址:http://t.cn/h5FGy
注意我们使用的是http而非https,不需要使用https,上文已经提到了。
四、最终代码示例
最终代码的示例参考这里http://haotaoqu.com/item-45.html
这个示例将一个又臭又长的淘宝客URL地址转换为了新浪短地址。
Javascript代码如下:
五、除了short_url/shorten,其他可以用这个方法调用的API
任何标有“login required: no”的接口都可以通过本文的rogue方法调用。打开%E6%96%87%E6%A1%A3_V2的官方文档慢慢选择~
网站调用新浪微博内容(网站调用新浪微博内容时,它会被搜索引擎索引)
网站优化 • 优采云 发表了文章 • 0 个评论 • 111 次浏览 • 2022-04-04 06:04
网站调用新浪微博内容时,它会从新浪微博服务器采集每个useragent的调用参数,所以它会需要耗费1秒的时间来请求,这个时间称为爬虫的异步时间。另外它还需要一个发送时间,也就是1秒内发送调用请求的响应时间。
这个时间一定是固定的,没有提示。
这和google算法关系很大的
相信绝大多数人都遇到过这种情况,微博启动的时候一定会启动后台爬虫,爬取useragent,然后返回数据服务器做归档。微博里需要实时更新的信息,如时间,位置,图片等也会通过后台链接获取当前的页面,再通过header下发给server进行抓取。server后台会把抓取到的useragent参数送到归档服务器,经过几秒时间,其中网页抓取到的内容就被归档到服务器了。如果微博处于热门话题,你看到的内容也更容易被搜索引擎索引。
1、数据库2、server层主要是这两个
不会
其实我也一直觉得奇怪。如果新浪微博内容抓取时也能靠google的api完成那就好了。如果是新浪自己做的api完成后端爬虫和传输那也完全可以把。关键还是用户需求变化。比如我以前看到新浪在amazon那个抓取下单,新浪并没有把那个链接、国内新闻useragent抓取,而是把后端抓取的数据和国外那个合并到一起了。
比如useragent是一个网页地址在新浪这个地址表单或其他的形式的形式。这就给用户带来更大的意义。比如正常从微博搜索结果页找,搜索结果页并不会增加以前的抓取一个记录。而新浪抓取不到那个也带不来任何意义了。不过我现在觉得这个主要就是google把自己的服务赚到了而已。 查看全部
网站调用新浪微博内容(网站调用新浪微博内容时,它会被搜索引擎索引)
网站调用新浪微博内容时,它会从新浪微博服务器采集每个useragent的调用参数,所以它会需要耗费1秒的时间来请求,这个时间称为爬虫的异步时间。另外它还需要一个发送时间,也就是1秒内发送调用请求的响应时间。
这个时间一定是固定的,没有提示。
这和google算法关系很大的
相信绝大多数人都遇到过这种情况,微博启动的时候一定会启动后台爬虫,爬取useragent,然后返回数据服务器做归档。微博里需要实时更新的信息,如时间,位置,图片等也会通过后台链接获取当前的页面,再通过header下发给server进行抓取。server后台会把抓取到的useragent参数送到归档服务器,经过几秒时间,其中网页抓取到的内容就被归档到服务器了。如果微博处于热门话题,你看到的内容也更容易被搜索引擎索引。
1、数据库2、server层主要是这两个
不会
其实我也一直觉得奇怪。如果新浪微博内容抓取时也能靠google的api完成那就好了。如果是新浪自己做的api完成后端爬虫和传输那也完全可以把。关键还是用户需求变化。比如我以前看到新浪在amazon那个抓取下单,新浪并没有把那个链接、国内新闻useragent抓取,而是把后端抓取的数据和国外那个合并到一起了。
比如useragent是一个网页地址在新浪这个地址表单或其他的形式的形式。这就给用户带来更大的意义。比如正常从微博搜索结果页找,搜索结果页并不会增加以前的抓取一个记录。而新浪抓取不到那个也带不来任何意义了。不过我现在觉得这个主要就是google把自己的服务赚到了而已。
网站调用新浪微博内容( 安卓项目添加新浪微博一件关注的功能,注册什么SDK)
网站优化 • 优采云 发表了文章 • 0 个评论 • 47 次浏览 • 2022-04-03 22:12
安卓项目添加新浪微博一件关注的功能,注册什么SDK)
调用新浪微博展示用户信息
最近需要在开发的Android项目中添加新浪微博的关注功能。本来是一个很简单的功能,就是调用新浪微博客户端的Activity来展示用户信息,然后用户就可以点击关注按钮了。它原本是一个非常简单的功能。网上能找到的代码几乎都是JS代码,或者注册新浪微博SDK的代码。这么简单的功能,应该不需要注册任何SDK,也不想参与任何JS。研究一下新浪微博客户端的Activity就好了。
首先,我们需要使用AXMLPrinter2.jar反编译新浪微博的AndroidManifest.xml,找到显示用户信息的页面。反编译后的代码如下:
java -jar AXMLPrinter2.jar AndroidManifest.xml > a.xml
打开反编译的a.xml,搜索userinfo,幸运的是找到了UserInfoActivity,如下图:
UserInfoActivity 注册了两个意图过滤器。第一个注册的url是sinaweibo://userinfo?uid=3444956000。有了这些信息,通过如下代码调用新浪微博客户端显示用户信息:
var intent = new Intent(Intent.ActionView);
var uri = Android.Net.Uri.Parse("sinaweibo://userinfo?uid=3444956000");
intent.SetData(uri);
var chooseIntent = Intent.CreateChooser(intent, "Weibo");
StartActivity(chooseIntent);
不过以上代码的前提是用户已经安装了新浪微博客户端,否则运行会报错。好在还有第二个,我们可以用下面的代码来调用:
var intent = new Intent(Intent.ActionView);
var uri = Android.Net.Uri.Parse("https://weibo.cn/qr/userinfo?uid=3444956000");
intent.SetData(uri);
var chooseIntent = Intent.CreateChooser(intent, "Weibo");
StartActivity(chooseIntent);
上面代码的效果是:
如果用户没有安装新浪微博,直接调用浏览器打开地址;如果用户安装新浪微博,会弹出如下对话框供用户选择:
再次鄙视新浪微博的开放性,但这个功能是不开放的。 查看全部
网站调用新浪微博内容(
安卓项目添加新浪微博一件关注的功能,注册什么SDK)
调用新浪微博展示用户信息
最近需要在开发的Android项目中添加新浪微博的关注功能。本来是一个很简单的功能,就是调用新浪微博客户端的Activity来展示用户信息,然后用户就可以点击关注按钮了。它原本是一个非常简单的功能。网上能找到的代码几乎都是JS代码,或者注册新浪微博SDK的代码。这么简单的功能,应该不需要注册任何SDK,也不想参与任何JS。研究一下新浪微博客户端的Activity就好了。
首先,我们需要使用AXMLPrinter2.jar反编译新浪微博的AndroidManifest.xml,找到显示用户信息的页面。反编译后的代码如下:
java -jar AXMLPrinter2.jar AndroidManifest.xml > a.xml
打开反编译的a.xml,搜索userinfo,幸运的是找到了UserInfoActivity,如下图:
UserInfoActivity 注册了两个意图过滤器。第一个注册的url是sinaweibo://userinfo?uid=3444956000。有了这些信息,通过如下代码调用新浪微博客户端显示用户信息:
var intent = new Intent(Intent.ActionView);
var uri = Android.Net.Uri.Parse("sinaweibo://userinfo?uid=3444956000");
intent.SetData(uri);
var chooseIntent = Intent.CreateChooser(intent, "Weibo");
StartActivity(chooseIntent);
不过以上代码的前提是用户已经安装了新浪微博客户端,否则运行会报错。好在还有第二个,我们可以用下面的代码来调用:
var intent = new Intent(Intent.ActionView);
var uri = Android.Net.Uri.Parse("https://weibo.cn/qr/userinfo?uid=3444956000");
intent.SetData(uri);
var chooseIntent = Intent.CreateChooser(intent, "Weibo");
StartActivity(chooseIntent);
上面代码的效果是:
如果用户没有安装新浪微博,直接调用浏览器打开地址;如果用户安装新浪微博,会弹出如下对话框供用户选择:
再次鄙视新浪微博的开放性,但这个功能是不开放的。
网站调用新浪微博内容(网站调用新浪微博内容时,不是从新浪微博的草根机制算法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-04-02 17:03
网站调用新浪微博内容时,不是从新浪微博的草根机制算法发出消息推送而是从百度爬虫抓取,也就是说,新浪微博的吃相很难看说他是抄袭?新浪微博已经明确表态,不解决这个问题,
实际上现在有的网站就是通过网络爬虫抓取新浪网的内容,然后转发出去。
新浪从来不靠这赚钱,说白了就是维护客户体验,不再制造垃圾信息。
同意楼上的观点,现在的网站获取用户信息和交流交流是靠人工爬虫获取的。也就是俗称的人肉爬虫,对搜索引擎的冲击一定是蛮大的,毕竟是自家网站,有严格的权限审查要求。但是会造成网站的假内容泛滥,这就是技术问题了。
实际上,是人工计算机爬虫去访问新浪微博的,网站主不去访问新浪微博。
首先得说明一点:人肉搜索不是不可取的,只是前几年说好的人肉搜索是指ip网站,而现在火力在获取内容上,可以说是比较不健康的企业文化。1、说下api的特点及作用:简单来说就是用浏览器内置的api访问。正常来说肯定不会被要求,因为外链是双向的,而api就是将外链加权一个很重要的部分。但是,上面也说了,用浏览器获取是不可取的,如果网站想合法获取用户信息,还是用api很靠谱。
另外,如果程序被植入过爬虫代码,是非法的,一经发现后果严重。所以,为了基本的用户体验,还是用api。2、人肉搜索在大流量网站难以见到吗?并不是。毕竟,当前平台都在让流量分散到一些平台比如新浪微博、微信里,必然爬虫对于大流量有这自身考虑,爬取也不会很泛滥,爬取时有个限制才行。api的价值更多是在数据挖掘方面,其根本原因还是内容分析,这方面java、python、ruby都可以,当然还有c#。
国内的知名网站有人肉搜索专利,还有利用人肉搜索找数据的。我接触过比如csdn和快易搜也就是flipboard的api,他们是整站对爬取的控制严格些,其他的网站简单,甚至也可以用这个api,但是不能随便滥用。(这个曾经有过玩笑谈到过)总的来说,人肉搜索技术基本达到可以商用程度,其原理也与正常爬虫并无二致,至于其不可取的部分,更多原因还是在于合规性与法律方面,并不是从业人员不了解而已。 查看全部
网站调用新浪微博内容(网站调用新浪微博内容时,不是从新浪微博的草根机制算法)
网站调用新浪微博内容时,不是从新浪微博的草根机制算法发出消息推送而是从百度爬虫抓取,也就是说,新浪微博的吃相很难看说他是抄袭?新浪微博已经明确表态,不解决这个问题,
实际上现在有的网站就是通过网络爬虫抓取新浪网的内容,然后转发出去。
新浪从来不靠这赚钱,说白了就是维护客户体验,不再制造垃圾信息。
同意楼上的观点,现在的网站获取用户信息和交流交流是靠人工爬虫获取的。也就是俗称的人肉爬虫,对搜索引擎的冲击一定是蛮大的,毕竟是自家网站,有严格的权限审查要求。但是会造成网站的假内容泛滥,这就是技术问题了。
实际上,是人工计算机爬虫去访问新浪微博的,网站主不去访问新浪微博。
首先得说明一点:人肉搜索不是不可取的,只是前几年说好的人肉搜索是指ip网站,而现在火力在获取内容上,可以说是比较不健康的企业文化。1、说下api的特点及作用:简单来说就是用浏览器内置的api访问。正常来说肯定不会被要求,因为外链是双向的,而api就是将外链加权一个很重要的部分。但是,上面也说了,用浏览器获取是不可取的,如果网站想合法获取用户信息,还是用api很靠谱。
另外,如果程序被植入过爬虫代码,是非法的,一经发现后果严重。所以,为了基本的用户体验,还是用api。2、人肉搜索在大流量网站难以见到吗?并不是。毕竟,当前平台都在让流量分散到一些平台比如新浪微博、微信里,必然爬虫对于大流量有这自身考虑,爬取也不会很泛滥,爬取时有个限制才行。api的价值更多是在数据挖掘方面,其根本原因还是内容分析,这方面java、python、ruby都可以,当然还有c#。
国内的知名网站有人肉搜索专利,还有利用人肉搜索找数据的。我接触过比如csdn和快易搜也就是flipboard的api,他们是整站对爬取的控制严格些,其他的网站简单,甚至也可以用这个api,但是不能随便滥用。(这个曾经有过玩笑谈到过)总的来说,人肉搜索技术基本达到可以商用程度,其原理也与正常爬虫并无二致,至于其不可取的部分,更多原因还是在于合规性与法律方面,并不是从业人员不了解而已。
网站调用新浪微博内容(新浪应用开发:使用新浪微博API发一条微博使用)
网站优化 • 优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2022-04-02 06:07
新浪应用开发:使用新浪微博API发微博
使用新浪微博API发微博第一步:首先下载安装并配置JAVA环境,然后下载myecplise10。Step 2:在新浪微博API页面找到并下载SDK for JAVA, Step 3:申请成为开发者,获取新应用的APP_KEY。第四步:按照说明配置:Config.properties中的client_ID:appkey创建的appkey client_SERCRET:app_secret获取的appsecret redirect_URI:OAuth2回调地址Callback address):报错如下:第三方错误访问出错!您在新浪微博上访问的网站认证失败。请联系开发者助理或稍后再试。(error:invalid_request) Q:这个回调地址需要独立的域名和空间吗?A:不需要独立的域名和空间,可以在本地使用,但必须配置互联网信息服务。第六步:运行OAuth4Code.java获取code,输入code获取access token。第7步:编写代码发送微博。代码显示如下:
立即下载 查看全部
网站调用新浪微博内容(新浪应用开发:使用新浪微博API发一条微博使用)
新浪应用开发:使用新浪微博API发微博
使用新浪微博API发微博第一步:首先下载安装并配置JAVA环境,然后下载myecplise10。Step 2:在新浪微博API页面找到并下载SDK for JAVA, Step 3:申请成为开发者,获取新应用的APP_KEY。第四步:按照说明配置:Config.properties中的client_ID:appkey创建的appkey client_SERCRET:app_secret获取的appsecret redirect_URI:OAuth2回调地址Callback address):报错如下:第三方错误访问出错!您在新浪微博上访问的网站认证失败。请联系开发者助理或稍后再试。(error:invalid_request) Q:这个回调地址需要独立的域名和空间吗?A:不需要独立的域名和空间,可以在本地使用,但必须配置互联网信息服务。第六步:运行OAuth4Code.java获取code,输入code获取access token。第7步:编写代码发送微博。代码显示如下:
立即下载
网站调用新浪微博内容(前段时间收到了新浪微博客开放平台发来协议)
网站优化 • 优采云 发表了文章 • 0 个评论 • 74 次浏览 • 2022-03-29 16:04
前段时间收到新浪微博开放平台发来的邮件,宣布OAuth1协议将在9月份停止,让我很意外。以下为邮件原文:
尊敬的开发者您好:
新浪微博开放平台预计于2012年9月停止使用旧接口和OAuth1.0。请尽快将您的应用迁移到新接口和OAuth2.0。
新版界面效率更高,功能更丰富。为了帮助您迁移,请参考以下链接:
...
希望大家做好相关准备。技术问题可以咨询@microblogging API。给开发者带来的不便敬请谅解。
今年 9 月的最后期限是一个重磅炸弹,让所有仍在 Oauth1 上的 网站 都面临不得不升级的尴尬。
之前花了一些时间研究了新浪微博的全过程。事实上,我大部分时间都在研究它的审计机制。OAuth2 调用相对简单。先说一下如何使用OAuth2进行授权。
其实开发前还需要做一些准备工作,比如在新浪微博开放平台上创建一个账号,其实就是一个微博账号。登录后访问,点击“网站访问”,会引导你添加一个新的网站表单,这里有一点需要注意,目前,网站的访问新浪微博可以验证域名的归属,所以必须输入正确的域名并在网站首页添加相应的meta标签才能通过。完成后不需要立即提交审核,因为这一步需要提供备案密码,不备案不能通过,但是验证域名的前提是服务器的80端口可以访问,并且是一个解析的域名,
网站访问后获取的App Key和App Secret需要保存,在代码中使用。
由于我更喜欢使用design,所以OAuth2的集成也是基于design,在Gemfile中添加了对应的gem:
宝石文件
1
2
3
# Weibo support
gem 'devise'
gem 'omniauth-weibo-oauth2', '~> 0.2.0'
在项目根目录下执行bundle,安装对应的gem
使用设计的朋友应该知道,user.rb模型中默认会有一个功能模块配置,模块修改如下:
应用程序/模型/user.rb
1
2
3
4
5
6
7
8
9
10
11
12
class User > User.omniauth_providers
=> [:weibo]
至此,我们可以配置我们之前做的网站访问,新建一个service.yml来存放第三方App Key和App Secret:
应用程序/配置/服务.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<p>common: &common
weibo:
api_key: "这里填写你获取到的api key"
api_secret: "这里填写你获取到的api secret"
redirect_uri: "http://www.yourdomain.com/user ... ot%3B
production: 查看全部
网站调用新浪微博内容(前段时间收到了新浪微博客开放平台发来协议)
前段时间收到新浪微博开放平台发来的邮件,宣布OAuth1协议将在9月份停止,让我很意外。以下为邮件原文:
尊敬的开发者您好:
新浪微博开放平台预计于2012年9月停止使用旧接口和OAuth1.0。请尽快将您的应用迁移到新接口和OAuth2.0。
新版界面效率更高,功能更丰富。为了帮助您迁移,请参考以下链接:
...
希望大家做好相关准备。技术问题可以咨询@microblogging API。给开发者带来的不便敬请谅解。
今年 9 月的最后期限是一个重磅炸弹,让所有仍在 Oauth1 上的 网站 都面临不得不升级的尴尬。
之前花了一些时间研究了新浪微博的全过程。事实上,我大部分时间都在研究它的审计机制。OAuth2 调用相对简单。先说一下如何使用OAuth2进行授权。
其实开发前还需要做一些准备工作,比如在新浪微博开放平台上创建一个账号,其实就是一个微博账号。登录后访问,点击“网站访问”,会引导你添加一个新的网站表单,这里有一点需要注意,目前,网站的访问新浪微博可以验证域名的归属,所以必须输入正确的域名并在网站首页添加相应的meta标签才能通过。完成后不需要立即提交审核,因为这一步需要提供备案密码,不备案不能通过,但是验证域名的前提是服务器的80端口可以访问,并且是一个解析的域名,
网站访问后获取的App Key和App Secret需要保存,在代码中使用。
由于我更喜欢使用design,所以OAuth2的集成也是基于design,在Gemfile中添加了对应的gem:
宝石文件
1
2
3
# Weibo support
gem 'devise'
gem 'omniauth-weibo-oauth2', '~> 0.2.0'
在项目根目录下执行bundle,安装对应的gem
使用设计的朋友应该知道,user.rb模型中默认会有一个功能模块配置,模块修改如下:
应用程序/模型/user.rb
1
2
3
4
5
6
7
8
9
10
11
12
class User > User.omniauth_providers
=> [:weibo]
至此,我们可以配置我们之前做的网站访问,新建一个service.yml来存放第三方App Key和App Secret:
应用程序/配置/服务.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<p>common: &common
weibo:
api_key: "这里填写你获取到的api key"
api_secret: "这里填写你获取到的api secret"
redirect_uri: "http://www.yourdomain.com/user ... ot%3B
production:
网站调用新浪微博内容(开发者注册新浪微博开放平台完成开发者认证按照流程走,写回调方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 68 次浏览 • 2022-03-26 22:08
比如QQ互联,这里详细介绍如何实现微博登录。
成为开发者
首先,你还是要注册一个微博账号,使用微博账号登录开放平台。
打开微博开放平台官网,点击登录完成开发者注册
新浪微博开放平台
完成开发者认证
按照流程,开发者类型一般选择个人。
开发者认证
创建网站应用
一般来说,我们创建的是网站应用程序,其他应用程序类似,所以这里仅以网站应用程序为例。
完成认证后,选择首页微链接菜单下的网站访问(或首页下的网站访问WEB),并填写所需信息。
创建应用
需要准备的材料有:
1、域名注册完成
2、已开发网站
3、服务器
4、应用图标
注意:
填写基本信息后,还需要填写高级信息。高级信息中的授权回调页面和取消授权回调页面非常重要,非常重要,非常重要(重要的事情说三遍)。
授权回调页面是授权完成后回调的页面,该页面必须在申请地址域名下。同理,取消授权回调页面是取消授权后回调的页面(一般是跳转回登录页面)。
有节制
审稿时间一般为1个工作日,所以为了节省时间,信息一定要准确,避免多次修改。
审计
页面开发
开发模式有两种,一种是使用sdk,一种是自定义开发。SDK开发门槛低,无需了解具体授权逻辑。只需粘贴代码。下面简单介绍一下登录按钮(不推荐这种方式,推荐定制开发)。
打开链接
配置登录按钮样式
配置登录按钮样式
选择一个应用程序
复制代码
1、将 XML 命名空间添加到 HTML 标记
2、在 HEAD 头中引入 WB.JS
3、 在需要部署登录按钮的地方粘贴WBML代码(复制代码)
4、写回调方法
WB2.anyWhere(函数(W){
W.widget.connectButton({
id: "wb_connect_btn",
类型:“3,2”,
打回来 : {
login:function(o){ //登录后回调函数
},
logout:function(){ //退出后回调函数
}
}
});
定制开发(推荐)
我们是专业的,一定要选择定制开发(可以跳过上面的sdk教程)。
填写完网站应用信息后,开始使用界面,登录功能主要包括以下几个界面:
1、OAuth2.0 授权登录接口
2、获取token和uid接口
3、获取用户信息接口
第 1 步:添加指向登录页面的链接
微博
这里的应用主键是App Key。在开发平台的应用管理中可以看到回调地址是应用高级信息中的授权回调页面,两者必须相同。
第二步:开发授权回调页面
因为回调页面必须在外网,所以开发过程中必须经常部署新的网站(更新部分就足够了),所以这一步之后服务器必须要有权限。
回调页面中有一个很重要的参数,就是地址栏上的code参数。code参数是授权获取token后自动带上的,并且只能使用一次。如果再次使用,则会出现错误。
第三步:根据代码交换token和uid
这时需要在后台以post的形式请求access_token接口,地址为
"+ 应用主键+ "&client_secret="+ 应用秘钥+ "&grant_type=authorization_code&redirect_uri="+ 回调地址+ "&code="+ 获取代码
应用主键和应用密钥都可以在应用管理中找到。因为很重要,所以必须在后台请求(前台请求有跨域和header信息不一致的问题),并且回调地址和代码都是通过前台传递的,下面是后台代码
C#获取微博token
令牌实体类
第四步:获取用户信息(登录)
获取用户信息的前提是提供token和uid,所以我们调用第三步封装的方法privateWBTokenStateGetWeiBoToken(stringcode, stringcallback)。此时请求的地址是""+兑换了token+"&uid="+兑换了uid
此时代码如下
微博登录
微博用户实体类
具体登录逻辑略...
第 5 步:调用前台
这时候后台已经写好了,前台开始打电话。
先判断回调地址的code参数是否为空,然后动态获取回调地址(后面改很麻烦,测试的时候一定要写死),然后调用后台写的登录接口(后台登录界面自动交换token、uid并获取用户信息),下面是具体代码
使用angularjs,应该不难理解
结束语
微博登录的意义在于接入大量微博用户,降低网站注册门槛,实现社交关系的零成本引入和优质内容的快速传播。
ps:
代码只能使用一次,再次使用会报错,需要在后台调用post方法。
授权机制(包括获取uid)
授权机制
获取uid
获取用户信息
js SDK 查看全部
网站调用新浪微博内容(开发者注册新浪微博开放平台完成开发者认证按照流程走,写回调方法)
比如QQ互联,这里详细介绍如何实现微博登录。
成为开发者
首先,你还是要注册一个微博账号,使用微博账号登录开放平台。
打开微博开放平台官网,点击登录完成开发者注册

新浪微博开放平台
完成开发者认证
按照流程,开发者类型一般选择个人。

开发者认证
创建网站应用
一般来说,我们创建的是网站应用程序,其他应用程序类似,所以这里仅以网站应用程序为例。
完成认证后,选择首页微链接菜单下的网站访问(或首页下的网站访问WEB),并填写所需信息。

创建应用
需要准备的材料有:
1、域名注册完成
2、已开发网站
3、服务器
4、应用图标
注意:
填写基本信息后,还需要填写高级信息。高级信息中的授权回调页面和取消授权回调页面非常重要,非常重要,非常重要(重要的事情说三遍)。
授权回调页面是授权完成后回调的页面,该页面必须在申请地址域名下。同理,取消授权回调页面是取消授权后回调的页面(一般是跳转回登录页面)。
有节制
审稿时间一般为1个工作日,所以为了节省时间,信息一定要准确,避免多次修改。

审计
页面开发
开发模式有两种,一种是使用sdk,一种是自定义开发。SDK开发门槛低,无需了解具体授权逻辑。只需粘贴代码。下面简单介绍一下登录按钮(不推荐这种方式,推荐定制开发)。
打开链接
配置登录按钮样式

配置登录按钮样式
选择一个应用程序
复制代码
1、将 XML 命名空间添加到 HTML 标记
2、在 HEAD 头中引入 WB.JS
3、 在需要部署登录按钮的地方粘贴WBML代码(复制代码)
4、写回调方法
WB2.anyWhere(函数(W){
W.widget.connectButton({
id: "wb_connect_btn",
类型:“3,2”,
打回来 : {
login:function(o){ //登录后回调函数
},
logout:function(){ //退出后回调函数
}
}
});
定制开发(推荐)
我们是专业的,一定要选择定制开发(可以跳过上面的sdk教程)。
填写完网站应用信息后,开始使用界面,登录功能主要包括以下几个界面:
1、OAuth2.0 授权登录接口
2、获取token和uid接口
3、获取用户信息接口
第 1 步:添加指向登录页面的链接
微博
这里的应用主键是App Key。在开发平台的应用管理中可以看到回调地址是应用高级信息中的授权回调页面,两者必须相同。
第二步:开发授权回调页面
因为回调页面必须在外网,所以开发过程中必须经常部署新的网站(更新部分就足够了),所以这一步之后服务器必须要有权限。
回调页面中有一个很重要的参数,就是地址栏上的code参数。code参数是授权获取token后自动带上的,并且只能使用一次。如果再次使用,则会出现错误。
第三步:根据代码交换token和uid
这时需要在后台以post的形式请求access_token接口,地址为
"+ 应用主键+ "&client_secret="+ 应用秘钥+ "&grant_type=authorization_code&redirect_uri="+ 回调地址+ "&code="+ 获取代码
应用主键和应用密钥都可以在应用管理中找到。因为很重要,所以必须在后台请求(前台请求有跨域和header信息不一致的问题),并且回调地址和代码都是通过前台传递的,下面是后台代码

C#获取微博token

令牌实体类
第四步:获取用户信息(登录)
获取用户信息的前提是提供token和uid,所以我们调用第三步封装的方法privateWBTokenStateGetWeiBoToken(stringcode, stringcallback)。此时请求的地址是""+兑换了token+"&uid="+兑换了uid
此时代码如下

微博登录

微博用户实体类
具体登录逻辑略...
第 5 步:调用前台
这时候后台已经写好了,前台开始打电话。
先判断回调地址的code参数是否为空,然后动态获取回调地址(后面改很麻烦,测试的时候一定要写死),然后调用后台写的登录接口(后台登录界面自动交换token、uid并获取用户信息),下面是具体代码

使用angularjs,应该不难理解
结束语
微博登录的意义在于接入大量微博用户,降低网站注册门槛,实现社交关系的零成本引入和优质内容的快速传播。
ps:
代码只能使用一次,再次使用会报错,需要在后台调用post方法。
授权机制(包括获取uid)
授权机制
获取uid
获取用户信息
js SDK
网站调用新浪微博内容(探索的过程1.了解大致过程登陆微博,文章可能不再适用)
网站优化 • 优采云 发表了文章 • 0 个评论 • 47 次浏览 • 2022-03-26 14:06
概述:
由于业务需要,需要编写爬虫代码来爬取新浪微博用户的信息。
虽然网上可以查到很多资料,但由于新浪微博的改版,其登录机制被修改了,所以很多老的文章都不适合用了。
经过一番摸索,成功模拟了新浪微博的登录操作。该项目使用 Javascript 语言并在 ChromeExtension 中运行。我想和大家分享这个过程和经验。
请注意,这篇文章是在 2013.08.16 上写的。由于微博业务变化频繁,文章可能随着年龄的增长不再适用。
文本:探索的过程
1. 了解大致流程
登录微博,使用fiddler工具监听HTTP请求,拦截如下操作:
可以看出,在整个微博登录过程中,有四个重要的HTTP请求,分别是:
(1) GET /sso/prelogin.php
(2) POST /sso/login.php
(3) GET /ajaxlogin.php
(4) 获取 /u/2813262187
其中,sso为单点登录
(1)是登录前的预处理,名字也很明显--pre,这一步主要是获取几个重要的参数,作为下一个POST表单的参数。
您可以在浏览器中访问该请求的地址,查看返回结果:
(v1.4.11)
结果如下:
1sinaSSOController.preloginCallBack({"retcode":0,
2“服务器时间”:1376533839,
3"pcid":"gz-7bdd82b8980057a8bbc1f86b21d5a86184dd",
4"nonce":"R1KGHZ",
5 “PUBKEY”: “EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC2533E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443”
6"rsakv":"1330428213",
7“执行时间”:2})
返回的数据包括 servertime:服务时间戳,nonce:6 位随机码,pubkey:用于 rsa2 密码加密的公钥,rsakv:显然也用于加密。
下一步需要这四个值。
长期版的新浪微博登录机制,采用sha的加密方式,没有pubkey和rsakv参数。
所以网上看到的2012爬虫模拟登录代码的爬虫代码已经不适合使用了,但是整体逻辑没有太大变化,稍微修改一下还是可以使用的。=.=
给出两个参考文章:
对于 Python
对于 PHP
(2)提交表单的操作,我们还是看HTTP请求,看表单内容
请参阅 servertime、nonce、rsakv 和 su:加密的用户名,sp:加密的密码。现在的问题是如何加密用户名和密码。我们很容易将注意力集中在 js 代码上。
请求新浪登录页面:,其中收录密码加密的js代码,
里面的代码是加密的,找个工具来解密(),你几乎看不到里面的逻辑。
(3)分析 sslogin.js
既然知道了servertime和nonce是用来加密的,那我们不妨在文件中搜索一下这两个关键字,找到好东西:
回到上面看到,表格中有su和sp,两者都在这里,可以看到su使用的是base64加密方式;而 su 稍微复杂一点,
if是当前版本新浪密码加密方式rsa2的代码,else是版本sha加密的代码,我们只需要关心if里面的内容,
加密过程很简单,首先生成一个RSAKey对象,设置PublicKey,然后加密。
一个个往回推,可以知道最后一步加密的最后一个参数ag就是原来的密码值,不会看的眼花缭乱~
综上所述,调用 setPublic() 时以一长串 pubkey 和 10001 作为参数,注意都是十六进制数;然后使用 (servertime + nonce + pwd) 作为参数调用 Encrypt()。
让我们看看sinaSSOEncoder是什么。它的定义在解密代码的第 1118 行。从这里,截取到文件末尾,移出来供我们自己使用。
1}).call(sinaSSOEncoder);
2//sinaSSOController=newSSOController();
3//sinaSSOController.init();
这解决了密码加密的问题。
2. 模拟请求过程
现在您知道了一般原理,您可以开始模拟整个登录过程。
(1)GET 请求(v1.4.11)
返回的数据定期匹配 servertime、nonce 和 rsakv。请注意,请求时还应将时间戳发送到服务器。我们来看看fiddler监控的QueryString:
前五个参数都是在url中声明的,最后一个_发送请求的时候会加上,传过来。
我正在使用 Javascript,只需使用 Jquery 并将其添加到 $.ajax 中的数据属性。
(2)POST 请求(v1.4.11)提交登录表单
1个代理('(v1.4.11)',
2{type:'POST',headers:{Referer:'#39;},
3个数据:{
4entry:'微博',
5个网关:1个,
6来自:'',
7保存状态:7,
8使用票:1,
9pagerefer:'#39;,
10vsnf:1,
11 苏:'MTgxMDU0MjMzNyU0MHFxLmNvbQ==',
12service:'迷你博客',
13 服务器时间:服务器时间,
14 随机数:随机数,
15pwencode:'rsa2',
16 rsakv:rsakv,
17 sp:sp,
18编码:'UTF-8',
19prelt:505,
20url:'ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
21 返回类型:“元”
二十二}
23},函数(错误,数据){...});
agent是发送请求事务的封装模块,重点关注里面的数据对象,其中su是base64加密的用户名,每次调用都是固定的,所以这里写死;
servertime、nonce、rsakv都是上一步截取的;
sp是加密后的密码,可以参考上面的加密方法得到。 查看全部
网站调用新浪微博内容(探索的过程1.了解大致过程登陆微博,文章可能不再适用)
概述:
由于业务需要,需要编写爬虫代码来爬取新浪微博用户的信息。
虽然网上可以查到很多资料,但由于新浪微博的改版,其登录机制被修改了,所以很多老的文章都不适合用了。
经过一番摸索,成功模拟了新浪微博的登录操作。该项目使用 Javascript 语言并在 ChromeExtension 中运行。我想和大家分享这个过程和经验。
请注意,这篇文章是在 2013.08.16 上写的。由于微博业务变化频繁,文章可能随着年龄的增长不再适用。
文本:探索的过程
1. 了解大致流程
登录微博,使用fiddler工具监听HTTP请求,拦截如下操作:

可以看出,在整个微博登录过程中,有四个重要的HTTP请求,分别是:
(1) GET /sso/prelogin.php
(2) POST /sso/login.php
(3) GET /ajaxlogin.php
(4) 获取 /u/2813262187
其中,sso为单点登录
(1)是登录前的预处理,名字也很明显--pre,这一步主要是获取几个重要的参数,作为下一个POST表单的参数。
您可以在浏览器中访问该请求的地址,查看返回结果:
(v1.4.11)
结果如下:
1sinaSSOController.preloginCallBack({"retcode":0,
2“服务器时间”:1376533839,
3"pcid":"gz-7bdd82b8980057a8bbc1f86b21d5a86184dd",
4"nonce":"R1KGHZ",
5 “PUBKEY”: “EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC2533E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443”
6"rsakv":"1330428213",
7“执行时间”:2})
返回的数据包括 servertime:服务时间戳,nonce:6 位随机码,pubkey:用于 rsa2 密码加密的公钥,rsakv:显然也用于加密。
下一步需要这四个值。
长期版的新浪微博登录机制,采用sha的加密方式,没有pubkey和rsakv参数。
所以网上看到的2012爬虫模拟登录代码的爬虫代码已经不适合使用了,但是整体逻辑没有太大变化,稍微修改一下还是可以使用的。=.=
给出两个参考文章:
对于 Python
对于 PHP
(2)提交表单的操作,我们还是看HTTP请求,看表单内容

请参阅 servertime、nonce、rsakv 和 su:加密的用户名,sp:加密的密码。现在的问题是如何加密用户名和密码。我们很容易将注意力集中在 js 代码上。
请求新浪登录页面:,其中收录密码加密的js代码,
里面的代码是加密的,找个工具来解密(),你几乎看不到里面的逻辑。
(3)分析 sslogin.js
既然知道了servertime和nonce是用来加密的,那我们不妨在文件中搜索一下这两个关键字,找到好东西:

回到上面看到,表格中有su和sp,两者都在这里,可以看到su使用的是base64加密方式;而 su 稍微复杂一点,
if是当前版本新浪密码加密方式rsa2的代码,else是版本sha加密的代码,我们只需要关心if里面的内容,
加密过程很简单,首先生成一个RSAKey对象,设置PublicKey,然后加密。
一个个往回推,可以知道最后一步加密的最后一个参数ag就是原来的密码值,不会看的眼花缭乱~
综上所述,调用 setPublic() 时以一长串 pubkey 和 10001 作为参数,注意都是十六进制数;然后使用 (servertime + nonce + pwd) 作为参数调用 Encrypt()。
让我们看看sinaSSOEncoder是什么。它的定义在解密代码的第 1118 行。从这里,截取到文件末尾,移出来供我们自己使用。
1}).call(sinaSSOEncoder);
2//sinaSSOController=newSSOController();
3//sinaSSOController.init();
这解决了密码加密的问题。
2. 模拟请求过程
现在您知道了一般原理,您可以开始模拟整个登录过程。
(1)GET 请求(v1.4.11)
返回的数据定期匹配 servertime、nonce 和 rsakv。请注意,请求时还应将时间戳发送到服务器。我们来看看fiddler监控的QueryString:

前五个参数都是在url中声明的,最后一个_发送请求的时候会加上,传过来。
我正在使用 Javascript,只需使用 Jquery 并将其添加到 $.ajax 中的数据属性。
(2)POST 请求(v1.4.11)提交登录表单
1个代理('(v1.4.11)',
2{type:'POST',headers:{Referer:'#39;},
3个数据:{
4entry:'微博',
5个网关:1个,
6来自:'',
7保存状态:7,
8使用票:1,
9pagerefer:'#39;,
10vsnf:1,
11 苏:'MTgxMDU0MjMzNyU0MHFxLmNvbQ==',
12service:'迷你博客',
13 服务器时间:服务器时间,
14 随机数:随机数,
15pwencode:'rsa2',
16 rsakv:rsakv,
17 sp:sp,
18编码:'UTF-8',
19prelt:505,
20url:'ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
21 返回类型:“元”
二十二}
23},函数(错误,数据){...});
agent是发送请求事务的封装模块,重点关注里面的数据对象,其中su是base64加密的用户名,每次调用都是固定的,所以这里写死;
servertime、nonce、rsakv都是上一步截取的;
sp是加密后的密码,可以参考上面的加密方法得到。
网站调用新浪微博内容(安装微博python的安装方式及解决方案 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 43 次浏览 • 2022-03-24 23:07
)
一:获取app-key和app-secret
使用自己的微博账号登录微博开放平台(),在微博开放中心的“创建应用”下创建应用。根据需要填写申请信息。填写完成后,无需提交审核。您所需要的只是应用程序密钥。和应用程序秘密
二:设置授权回调页面
在“微博开放平台”的“管理中心”找到刚刚创建的应用,点击应用,点击左侧的“应用信息”栏,会看到“App key”和“App Secret”,这两个东西是后面程序中用到的。然后点击“应用信息”下“高级信息”中的“编辑”按钮,将“授权回调页面”设置为:,“取消授权回调页面”设置为:。
三:安装微博python SDK
有两种安装方法:
1:下载新浪微博SDK
2:python有一个简单的安装方法:直接在命令行输入:
sudo pip install sinaweibopy
四:实例验证,获取当前登录用户和他关注的用户的最新微博(授权)
这里需要注意的是,当浏览器弹出一个页面时,必须先点击“Authorize”(这里进行的OAuth 2鉴权,我理解是用户访问我的应用,将页面定向到新浪服务器,然后用户向新浪服务器输入信息并授权给我的应用访问用户数据,这里我授权微博给下面的程序),授权后浏览器中的URL类似:将代码后面的代码复制到控件中侧面,程序需要读取数据2024222384d5dc88316d21675259d73a
注意:如果要获取其他信息,只需修改
statuses = client.statuses__friends_timeline()['statuses']
中的 statuss__friends_timeline
# -*- coding: utf-8 -*-
from weibo import APIClient
import webbrowser #python内置的包
APP_KEY = 'xxxxxxxx'#注意替换这里为自己申请的App信息
APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html'#回调授权页面
#利用官方微博SDK
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
#得到授权页面的url,利用webbrowser打开这个url
url = client.get_authorize_url()
print url
webbrowser.open_new(url)
#获取code=后面的内容
print '输入url中code后面的内容后按回车键:'
code = raw_input()
#code = your.web.framework.request.get('code')
#client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
r = client.request_access_token(code)
access_token = r.access_token # 新浪返回的token,类似abc123xyz456
expires_in = r.expires_in
# 设置得到的access_token
client.set_access_token(access_token, expires_in)
#可以打印下看看里面都有什么东西
statuses = client.statuses__friends_timeline()['statuses'] #获取当前登录用户以及所关注用户(已授权)的微博
length = len(statuses)
print length
#输出了部分信息
for i in range(0,length):
print u'昵称:'+statuses[i]['user']['screen_name']
print u'简介:'+statuses[i]['user']['description']
print u'位置:'+statuses[i]['user']['location']
print u'微博:'+statuses[i]['text']
结果如下(截取部分数据):
以下是我的关注者的微博:
以上面的代码为例,我们这里得到的信息是:
查看全部
网站调用新浪微博内容(安装微博python的安装方式及解决方案
)
一:获取app-key和app-secret
使用自己的微博账号登录微博开放平台(),在微博开放中心的“创建应用”下创建应用。根据需要填写申请信息。填写完成后,无需提交审核。您所需要的只是应用程序密钥。和应用程序秘密
二:设置授权回调页面
在“微博开放平台”的“管理中心”找到刚刚创建的应用,点击应用,点击左侧的“应用信息”栏,会看到“App key”和“App Secret”,这两个东西是后面程序中用到的。然后点击“应用信息”下“高级信息”中的“编辑”按钮,将“授权回调页面”设置为:,“取消授权回调页面”设置为:。
三:安装微博python SDK
有两种安装方法:
1:下载新浪微博SDK
2:python有一个简单的安装方法:直接在命令行输入:
sudo pip install sinaweibopy
四:实例验证,获取当前登录用户和他关注的用户的最新微博(授权)
这里需要注意的是,当浏览器弹出一个页面时,必须先点击“Authorize”(这里进行的OAuth 2鉴权,我理解是用户访问我的应用,将页面定向到新浪服务器,然后用户向新浪服务器输入信息并授权给我的应用访问用户数据,这里我授权微博给下面的程序),授权后浏览器中的URL类似:将代码后面的代码复制到控件中侧面,程序需要读取数据2024222384d5dc88316d21675259d73a
注意:如果要获取其他信息,只需修改
statuses = client.statuses__friends_timeline()['statuses']
中的 statuss__friends_timeline
# -*- coding: utf-8 -*-
from weibo import APIClient
import webbrowser #python内置的包
APP_KEY = 'xxxxxxxx'#注意替换这里为自己申请的App信息
APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html'#回调授权页面
#利用官方微博SDK
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
#得到授权页面的url,利用webbrowser打开这个url
url = client.get_authorize_url()
print url
webbrowser.open_new(url)
#获取code=后面的内容
print '输入url中code后面的内容后按回车键:'
code = raw_input()
#code = your.web.framework.request.get('code')
#client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL)
r = client.request_access_token(code)
access_token = r.access_token # 新浪返回的token,类似abc123xyz456
expires_in = r.expires_in
# 设置得到的access_token
client.set_access_token(access_token, expires_in)
#可以打印下看看里面都有什么东西
statuses = client.statuses__friends_timeline()['statuses'] #获取当前登录用户以及所关注用户(已授权)的微博
length = len(statuses)
print length
#输出了部分信息
for i in range(0,length):
print u'昵称:'+statuses[i]['user']['screen_name']
print u'简介:'+statuses[i]['user']['description']
print u'位置:'+statuses[i]['user']['location']
print u'微博:'+statuses[i]['text']
结果如下(截取部分数据):
以下是我的关注者的微博:
以上面的代码为例,我们这里得到的信息是:
网站调用新浪微博内容(试试用python调用微博API的故事 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 51 次浏览 • 2022-03-24 16:01
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建一个APP,然后获取APP获取OAuth2.0授权所需的app key和app secret。
要了解 OAuth2,您可以查看链接到新浪微博的说明。OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127. 0.0.@ >1 好像不行),这真的让我焦急了好久。我没有使用 API 调用 网站,所以我检查了很多。看到有人写这个地址可以改用,我试了一下,成功了,对掉丝来说是个好消息。
这里有一个简单的程序来体验:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博授权网址,如第2行,用默认浏览器打开后,会提示登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)
登录后,您将被重定向到链接“htmlcode”>
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条推文
但是,这种手动输入代码的方式并不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,可以自动获取代码并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv 查看全部
网站调用新浪微博内容(试试用python调用微博API的故事
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建一个APP,然后获取APP获取OAuth2.0授权所需的app key和app secret。
要了解 OAuth2,您可以查看链接到新浪微博的说明。OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127. 0.0.@ >1 好像不行),这真的让我焦急了好久。我没有使用 API 调用 网站,所以我检查了很多。看到有人写这个地址可以改用,我试了一下,成功了,对掉丝来说是个好消息。
这里有一个简单的程序来体验:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博授权网址,如第2行,用默认浏览器打开后,会提示登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)
登录后,您将被重定向到链接“htmlcode”>
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条推文
但是,这种手动输入代码的方式并不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,可以自动获取代码并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv
网站调用新浪微博内容(试试用python调用微博API的方法微博接口 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 148 次浏览 • 2022-03-24 02:20
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建APP,然后获取APP获取OAuth2.0授权所需的app key和app secret。
了解 OAuth2 并查看新浪微博链接以获取说明。 OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127.0.0.@ >1 好像不行),这真的让我焦急了很久。我没有使用 API 调用 网站,所以我检查了很多。看到有人写可以用这个地址代替,我试了一下,果然,对掉丝来说是个好消息。
让我们从一个简单的程序开始,感受一下:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博的授权网址,如第2行。用默认浏览器打开后,会提示你登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)
登录后,您将被重定向到一个连接
key是码值,是认证的关键。手动输入码值模拟认证
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条微博
但是这种手动输入代码的方式不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,代码可以自动获取并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv 查看全部
网站调用新浪微博内容(试试用python调用微博API的方法微博接口
)
因为最近碰到一个调用新浪微博开放接口的项目,想试试用python调用微博API。
SDK下载地址:代码不超过十几K,完全可以理解。
如果你有微博账号,可以新建APP,然后获取APP获取OAuth2.0授权所需的app key和app secret。
了解 OAuth2 并查看新浪微博链接以获取说明。 OAuth2授权参数除了app key和app secret外,还需要网站回调地址redirect_uri,并且这个回调地址不允许在局域网内(神马localhost,127.0.0.@ >1 好像不行),这真的让我焦急了很久。我没有使用 API 调用 网站,所以我检查了很多。看到有人写可以用这个地址代替,我试了一下,果然,对掉丝来说是个好消息。
让我们从一个简单的程序开始,感受一下:
设置以下参数
import sys
import weibo
import webbrowser
APP_KEY = ''
MY_APP_SECRET = ''
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
获取微博的授权网址,如第2行。用默认浏览器打开后,会提示你登录微博,使用需要授权的账号登录,如下图
api = weibo.APIClient(app_key=APP_KEY,app_secret=MY_APP_SECRET,redirect_uri=REDIRECT_URL)
authorize_url = api.get_authorize_url()
print(authorize_url)
webbrowser.open_new(authorize_url)

登录后,您将被重定向到一个连接
key是码值,是认证的关键。手动输入码值模拟认证
request = api.request_access_token(code, REDIRECT_URL)
access_token = request.access_token
expires_in = request.expires_in
api.set_access_token(access_token, expires_in)
api.statuses.update.post(status=u'Test OAuth 2.0 Send a Weibo!')
access_token为获取到的token,expires_in为授权过期时间(UNIX时间)
使用 set_access_token 保存授权。往下走,就可以调用微博界面了。测试发了一条微博

但是这种手动输入代码的方式不适合调用程序。是否可以在不打开链接的情况下请求登录并获得授权?经过多方搜索参考,程序改进如下,代码可以自动获取并保存,方便程序服务调用。
accessWeibo
# -*- coding: utf-8 -*-
#/usr/bin/env python
#access to SinaWeibo By sinaweibopy
#实现微博自动登录,token自动生成,保存及更新
#适合于后端服务调用
from weibo import APIClient
import pymongo
import sys, os, urllib, urllib2
from http_helper import *
from retry import *
try:
import json
except ImportError:
import simplejson as json
# setting sys encoding to utf-8
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
# weibo api访问配置
APP_KEY = '' # app key
APP_SECRET = '' # app secret
REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html' # callback url 授权回调页,与OAuth2.0 授权设置的一致
USERID = '' # 登陆的微博用户名,必须是OAuth2.0 设置的测试账号
USERPASSWD = '' # 用户密码
client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=REDIRECT_URL)
def make_access_token():
#请求access token
params = urllib.urlencode({
'action':'submit',
'withOfficalFlag':'0',
'ticket':'',
'isLoginSina':'',
'response_type':'code',
'regCallback':'',
'redirect_uri':REDIRECT_URL,
'client_id':APP_KEY,
'state':'',
'from':'',
'userId':USERID,
'passwd':USERPASSWD,
})
login_url = 'https://api.weibo.com/oauth2/authorize'
url = client.get_authorize_url()
content = urllib2.urlopen(url)
if content:
headers = { 'Referer' : url }
request = urllib2.Request(login_url, params, headers)
opener = get_opener(False)
urllib2.install_opener(opener)
try:
f = opener.open(request)
return_redirect_uri = f.url
except urllib2.HTTPError, e:
return_redirect_uri = e.geturl()
# 取到返回的code
code = return_redirect_uri.split('=')[1]
#得到token
token = client.request_access_token(code,REDIRECT_URL)
save_access_token(token)
def save_access_token(token):
#将access token保存到MongoDB数据库
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
t={
"access_token":token['access_token'],
"expires_in":str(token['expires_in']),
"date":time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
}
db.token.insert(t,safe=True)
#Decorator 目的是当调用make_access_token()后再执行一次apply_access_token()
@retry(1)
def apply_access_token():
#从MongoDB读取及设置access token
try:
mongoCon=pymongo.Connection(host="127.0.0.1",port=27017)
db= mongoCon.weibo
if db.token.count()>0:
tokenInfos=db.token.find().sort([("_id",pymongo.DESCENDING)]).limit(1)
else:
make_access_token()
return False
for tokenInfo in tokenInfos:
access_token=tokenInfo["access_token"]
expires_in=tokenInfo["expires_in"]
try:
client.set_access_token(access_token, expires_in)
except StandardError, e:
if hasattr(e, 'error'):
if e.error == 'expired_token':
# token过期重新生成
make_access_token()
return False
else:
pass
except:
make_access_token()
return False
return True
if __name__ == "__main__":
apply_access_token()
# 以下为访问微博api的应用逻辑
# 以发布文字微博接口为例
client.statuses.update.post(status='Test OAuth 2.0 Send a Weibo!')
retry.py
import math
import time
# Retry decorator with exponential backoff
def retry(tries, delay=1, backoff=2):
"""Retries a function or method until it returns True.
delay sets the initial delay, and backoff sets how much the delay should
lengthen after each failure. backoff must be greater than 1, or else it
isn't really a backoff. tries must be at least 0, and delay greater than
0."""
if backoff decorated function
return deco_retry # @retry(arg[, ...]) -> true decorator
http_helper.py
# -*- coding: utf-8 -*-
#/usr/bin/env python
import urllib2,cookielib
class SmartRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_301(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_301(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def http_error_302(cls, req, fp, code, msg, headers):
result = urllib2.HTTPRedirectHandler.http_error_302(cls, req, fp, code, msg, headers)
result.status = code
print headers
return result
def get_cookie():
cookies = cookielib.CookieJar()
return urllib2.HTTPCookieProcessor(cookies)
def get_opener(proxy=False):
rv=urllib2.build_opener(get_cookie(), SmartRedirectHandler())
rv.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')]
return rv
网站调用新浪微博内容( 我以新浪微博和人人网为例,叙述一下怎样设置显示来源)
网站优化 • 优采云 发表了文章 • 0 个评论 • 63 次浏览 • 2022-03-24 02:19
我以新浪微博和人人网为例,叙述一下怎样设置显示来源)
在微博源码展示中链接自己的网站增加流量——以微博和人人网为例
Night Breeze 博客•2022 年 3 月 17 日下午 2:12•服务器•阅读 6
社交网站 几乎已成为我们日常在线生活中不可或缺的一部分。发个微博,或者发个大家的状态,就会被很多人看到。社交网站 通常会在发布的推文/状态旁边显示来源,而这些来源通常是社交网站 本身。事实上,这些来源是可以修改的。我们可以根据自己的需要改成符合自己宣传需求的来源,看到这条消息的朋友点击来源直接跳转到我们自己的网站。如果应用得当,这对在我们的社交圈中推广我们的 网站 有很大帮助。今天我就以新浪微博和人人网为例,介绍如何设置显示源。设置来源的效果如下图所示,分别是新浪微博和人人网的状态。
首先我们要了解源码展示的原理。众所周知,社交网站一般会将其部分资源对外开放,让开发者利用这个社交平台设计应用,实现互利共赢。应用发送的微博或者状态可以直接显示应用名称作为其来源,如果应用是网站,用户点击来源后可以跳转到我们自己的网站。使用这样的条件,我们可以在人人网和新浪微博上设置显示源。以下操作以已申请并审核的申请为准。如果您还没有申请,请到新浪微博开放平台和人人开放平台申请。
新浪微博的微博发送API比较简单。新浪官方SDK收录发送模块,我们可以直接使用。点击这里下载新浪微博的PHP SDK。下载完成后,打开config.php文件,填写你的APP-ID、APP-SecretKey、callback.php要上传的URL。将所有文件上传到您的 网站 之一的文件夹中,并再次检查数据,特别是如果 callback.php 的 URL 正确。然后我们登录微博开放平台,在具体应用下找到回调地址选项,设置为callback.php的URL。这样,当我们访问该文件夹时,我们就可以登录并发送微博了。博客会使用你的网站作为来源,可以直接链接。
相反,人人的API调用比较麻烦。这里需要说明一下人人API调用的简单流程。首先我们告知人人应用的名称和需要的权限,人人提供了一个登录界面供用户登录,用户登录后,按照我们刚刚申请的权限进行授权。如果授权成功,会通知人人,人人会返回一个代码。我们将此代码交换为人人公司的 access_token。之后,有了这个access_key,我们就可以调用人人提供的API进行权限内的操作了。人人网提供了相关的SDK,但是我下载下来看了之后发现这个PHP SDK真的很臃肿,语法错误很多。几次修改后,还是编译不通过,所以这里需要我们自己写文件。调用 API。说到这里,我不得不抱怨。几个月前,我很好地使用了 API 的 1.0 版本。最近两个月,大家突然升级了版本,所以我所有的API都要返工了。写。 . . =_=^!!!好了,不说这个了,看代码吧:
1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /><br />
将脚本保存到你的网站并设置为renren.php,登录后,发送状态的API调用就完成了。本次发送的状态会显示来自XX网站的来源提示,点击跳转到我们的网站,达到宣传的目的。
其他社交网站,比如搜狐微博、腾讯微博,甚至Twitter和Facebook,都是类似的。如果需要搭建应用,可以直接阅读开放平台提供的文档,即使是PHP小白(或者其他语言)也可以轻松编写我们需要的功能。 查看全部
网站调用新浪微博内容(
我以新浪微博和人人网为例,叙述一下怎样设置显示来源)
在微博源码展示中链接自己的网站增加流量——以微博和人人网为例
Night Breeze 博客•2022 年 3 月 17 日下午 2:12•服务器•阅读 6
社交网站 几乎已成为我们日常在线生活中不可或缺的一部分。发个微博,或者发个大家的状态,就会被很多人看到。社交网站 通常会在发布的推文/状态旁边显示来源,而这些来源通常是社交网站 本身。事实上,这些来源是可以修改的。我们可以根据自己的需要改成符合自己宣传需求的来源,看到这条消息的朋友点击来源直接跳转到我们自己的网站。如果应用得当,这对在我们的社交圈中推广我们的 网站 有很大帮助。今天我就以新浪微博和人人网为例,介绍如何设置显示源。设置来源的效果如下图所示,分别是新浪微博和人人网的状态。




首先我们要了解源码展示的原理。众所周知,社交网站一般会将其部分资源对外开放,让开发者利用这个社交平台设计应用,实现互利共赢。应用发送的微博或者状态可以直接显示应用名称作为其来源,如果应用是网站,用户点击来源后可以跳转到我们自己的网站。使用这样的条件,我们可以在人人网和新浪微博上设置显示源。以下操作以已申请并审核的申请为准。如果您还没有申请,请到新浪微博开放平台和人人开放平台申请。
新浪微博的微博发送API比较简单。新浪官方SDK收录发送模块,我们可以直接使用。点击这里下载新浪微博的PHP SDK。下载完成后,打开config.php文件,填写你的APP-ID、APP-SecretKey、callback.php要上传的URL。将所有文件上传到您的 网站 之一的文件夹中,并再次检查数据,特别是如果 callback.php 的 URL 正确。然后我们登录微博开放平台,在具体应用下找到回调地址选项,设置为callback.php的URL。这样,当我们访问该文件夹时,我们就可以登录并发送微博了。博客会使用你的网站作为来源,可以直接链接。
相反,人人的API调用比较麻烦。这里需要说明一下人人API调用的简单流程。首先我们告知人人应用的名称和需要的权限,人人提供了一个登录界面供用户登录,用户登录后,按照我们刚刚申请的权限进行授权。如果授权成功,会通知人人,人人会返回一个代码。我们将此代码交换为人人公司的 access_token。之后,有了这个access_key,我们就可以调用人人提供的API进行权限内的操作了。人人网提供了相关的SDK,但是我下载下来看了之后发现这个PHP SDK真的很臃肿,语法错误很多。几次修改后,还是编译不通过,所以这里需要我们自己写文件。调用 API。说到这里,我不得不抱怨。几个月前,我很好地使用了 API 的 1.0 版本。最近两个月,大家突然升级了版本,所以我所有的API都要返工了。写。 . . =_=^!!!好了,不说这个了,看代码吧:
1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /><br />
将脚本保存到你的网站并设置为renren.php,登录后,发送状态的API调用就完成了。本次发送的状态会显示来自XX网站的来源提示,点击跳转到我们的网站,达到宣传的目的。
其他社交网站,比如搜狐微博、腾讯微博,甚至Twitter和Facebook,都是类似的。如果需要搭建应用,可以直接阅读开放平台提供的文档,即使是PHP小白(或者其他语言)也可以轻松编写我们需要的功能。
网站调用新浪微博内容(Python爬取新浪微博内容 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 46 次浏览 • 2022-03-22 13:05
)
用Python编写爬虫爬取微博大V的微博内容,本文以女神微博为例(爬取新浪m站:)
一般来说,爬虫爬取网站,首先选择m站,其次是wap站,最后考虑PC站。当然,这也不是绝对的,有时候PC站的资料最全,你只需要所有的资料,那么PC站就是你的首选。一般m站都是以m开头后跟一个域名,所以本文的网址是。
前期准备
1.代理IP
网上有很多免费的代理IP,比如西双的免费代理IP,你可以自己找一个可以用来测试的;
2.抓包分析
通过抓包获取微博内容地址。我不会在这里详细介绍。不明白的可以自行百度查找相关资料。完整代码直接在下面
完整代码:
# -*- coding: utf-8 -*-
import urllib.request
import json
#定义要爬取的微博大V的微博ID
id='1259110474'
#设置代理IP
proxy_addr="122.241.72.191:808"
#定义页面打开函数
def use_proxy(url,proxy_addr):
req=urllib.request.Request(url)
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")
proxy=urllib.request.ProxyHandler({'http':proxy_addr})
opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
data=urllib.request.urlopen(req).read().decode('utf-8','ignore')
return data
#获取微博主页的containerid,爬取微博内容时需要此id
def get_containerid(url):
data=use_proxy(url,proxy_addr)
content=json.loads(data).get('data')
for data in content.get('tabsInfo').get('tabs'):
if(data.get('tab_type')=='weibo'):
containerid=data.get('containerid')
return containerid
#获取微博大V账号的用户基本信息,如:微博昵称、微博地址、微博头像、关注人数、粉丝数、性别、等级等
def get_userInfo(id):
url='https://m.weibo.cn/api/contain ... %2Bid
data=use_proxy(url,proxy_addr)
content=json.loads(data).get('data')
profile_image_url=content.get('userInfo').get('profile_image_url')
description=content.get('userInfo').get('description')
profile_url=content.get('userInfo').get('profile_url')
verified=content.get('userInfo').get('verified')
guanzhu=content.get('userInfo').get('follow_count')
name=content.get('userInfo').get('screen_name')
fensi=content.get('userInfo').get('followers_count')
gender=content.get('userInfo').get('gender')
urank=content.get('userInfo').get('urank')
print("微博昵称:"+name+"\n"+"微博主页地址:"+profile_url+"\n"+"微博头像地址:"+profile_image_url+"\n"+"是否认证:"+str(verified)+"\n"+"微博说明:"+description+"\n"+"关注人数:"+str(guanzhu)+"\n"+"粉丝数:"+str(fensi)+"\n"+"性别:"+gender+"\n"+"微博等级:"+str(urank)+"\n")
#获取微博内容信息,并保存到文本中,内容包括:每条微博的内容、微博详情页面地址、点赞数、评论数、转发数等
def get_weibo(id,file):
i=1
while True:
url='https://m.weibo.cn/api/contain ... %2Bid
weibo_url='https://m.weibo.cn/api/contain ... nerid(url)+'&page='+str(i)
try:
data=use_proxy(weibo_url,proxy_addr)
content=json.loads(data).get('data')
cards=content.get('cards')
if(len(cards)>0):
for j in range(len(cards)):
print("-----正在爬取第"+str(i)+"页,第"+str(j)+"条微博------")
card_type=cards[j].get('card_type')
if(card_type==9):
mblog=cards[j].get('mblog')
attitudes_count=mblog.get('attitudes_count')
comments_count=mblog.get('comments_count')
created_at=mblog.get('created_at')
reposts_count=mblog.get('reposts_count')
scheme=cards[j].get('scheme')
text=mblog.get('text')
with open(file,'a',encoding='utf-8') as fh:
fh.write("----第"+str(i)+"页,第"+str(j)+"条微博----"+"\n")
fh.write("微博地址:"+str(scheme)+"\n"+"发布时间:"+str(created_at)+"\n"+"微博内容:"+text+"\n"+"点赞数:"+str(attitudes_count)+"\n"+"评论数:"+str(comments_count)+"\n"+"转发数:"+str(reposts_count)+"\n")
i+=1
else:
break
except Exception as e:
print(e)
pass
if __name__=="__main__":
file=id+".txt"
get_userInfo(id)
get_weibo(id,file)
抓取结果
查看全部
网站调用新浪微博内容(Python爬取新浪微博内容
)
用Python编写爬虫爬取微博大V的微博内容,本文以女神微博为例(爬取新浪m站:)
一般来说,爬虫爬取网站,首先选择m站,其次是wap站,最后考虑PC站。当然,这也不是绝对的,有时候PC站的资料最全,你只需要所有的资料,那么PC站就是你的首选。一般m站都是以m开头后跟一个域名,所以本文的网址是。
前期准备
1.代理IP
网上有很多免费的代理IP,比如西双的免费代理IP,你可以自己找一个可以用来测试的;
2.抓包分析
通过抓包获取微博内容地址。我不会在这里详细介绍。不明白的可以自行百度查找相关资料。完整代码直接在下面
完整代码:
# -*- coding: utf-8 -*-
import urllib.request
import json
#定义要爬取的微博大V的微博ID
id='1259110474'
#设置代理IP
proxy_addr="122.241.72.191:808"
#定义页面打开函数
def use_proxy(url,proxy_addr):
req=urllib.request.Request(url)
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")
proxy=urllib.request.ProxyHandler({'http':proxy_addr})
opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
data=urllib.request.urlopen(req).read().decode('utf-8','ignore')
return data
#获取微博主页的containerid,爬取微博内容时需要此id
def get_containerid(url):
data=use_proxy(url,proxy_addr)
content=json.loads(data).get('data')
for data in content.get('tabsInfo').get('tabs'):
if(data.get('tab_type')=='weibo'):
containerid=data.get('containerid')
return containerid
#获取微博大V账号的用户基本信息,如:微博昵称、微博地址、微博头像、关注人数、粉丝数、性别、等级等
def get_userInfo(id):
url='https://m.weibo.cn/api/contain ... %2Bid
data=use_proxy(url,proxy_addr)
content=json.loads(data).get('data')
profile_image_url=content.get('userInfo').get('profile_image_url')
description=content.get('userInfo').get('description')
profile_url=content.get('userInfo').get('profile_url')
verified=content.get('userInfo').get('verified')
guanzhu=content.get('userInfo').get('follow_count')
name=content.get('userInfo').get('screen_name')
fensi=content.get('userInfo').get('followers_count')
gender=content.get('userInfo').get('gender')
urank=content.get('userInfo').get('urank')
print("微博昵称:"+name+"\n"+"微博主页地址:"+profile_url+"\n"+"微博头像地址:"+profile_image_url+"\n"+"是否认证:"+str(verified)+"\n"+"微博说明:"+description+"\n"+"关注人数:"+str(guanzhu)+"\n"+"粉丝数:"+str(fensi)+"\n"+"性别:"+gender+"\n"+"微博等级:"+str(urank)+"\n")
#获取微博内容信息,并保存到文本中,内容包括:每条微博的内容、微博详情页面地址、点赞数、评论数、转发数等
def get_weibo(id,file):
i=1
while True:
url='https://m.weibo.cn/api/contain ... %2Bid
weibo_url='https://m.weibo.cn/api/contain ... nerid(url)+'&page='+str(i)
try:
data=use_proxy(weibo_url,proxy_addr)
content=json.loads(data).get('data')
cards=content.get('cards')
if(len(cards)>0):
for j in range(len(cards)):
print("-----正在爬取第"+str(i)+"页,第"+str(j)+"条微博------")
card_type=cards[j].get('card_type')
if(card_type==9):
mblog=cards[j].get('mblog')
attitudes_count=mblog.get('attitudes_count')
comments_count=mblog.get('comments_count')
created_at=mblog.get('created_at')
reposts_count=mblog.get('reposts_count')
scheme=cards[j].get('scheme')
text=mblog.get('text')
with open(file,'a',encoding='utf-8') as fh:
fh.write("----第"+str(i)+"页,第"+str(j)+"条微博----"+"\n")
fh.write("微博地址:"+str(scheme)+"\n"+"发布时间:"+str(created_at)+"\n"+"微博内容:"+text+"\n"+"点赞数:"+str(attitudes_count)+"\n"+"评论数:"+str(comments_count)+"\n"+"转发数:"+str(reposts_count)+"\n")
i+=1
else:
break
except Exception as e:
print(e)
pass
if __name__=="__main__":
file=id+".txt"
get_userInfo(id)
get_weibo(id,file)
抓取结果
网站调用新浪微博内容(新浪微博短地址接口(API)的简单接入 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 58 次浏览 • 2022-03-22 13:03
)
在短地址(也称为短链接、缩短地址等)方面,twitter发展起来后,还在不断发展,很多互联网网站使用短地址,很多在国内和在国外,但稳定稳定的可靠性在国内还是比较靠谱的。我不怕没有墙。几家外国公司已经遭遇了悲剧。因此,如果项目中使用短地址,我还是推荐使用新浪或其他国内短链接服务。
新浪微博短链接API开放,腾讯微博短地址API未开放。本想通过不同的途径获取腾讯微博API,但以失败告终。新浪微博短地址API不需要用户登录,直接调用即可,速度非常快。以下代码来源于网站,使用CURL POST方式供参考。
新浪微博短链接API文档在旧版开发文档中,新版中没有添加:
function shortenSinaUrl(long_url){apiKey='1234567890';//这里是你申请的应用的API KEY,随便写个应用名就会自动分配给你
apiUrl='http://api.t.sina.com.cn/short_url/shorten.json?source='.apiKey.'&url_long='.long_url;curlObj = curl_init();
curl_setopt(curlObj, CURLOPT_URL,apiUrl);
curl_setopt(curlObj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(curlObj, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(curlObj, CURLOPT_HEADER, 0);
curl_setopt(curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
response = curl_exec(curlObj);
curl_close(curlObj);json = json_decode(response);
returnjson[0]->url_short;
}
function expandSinaUrl(short_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/expand.json?source='.apiKey.'&url_short='.short_url;curlObj = curl_init();
curl_setopt(curlObj, CURLOPT_URL,apiUrl);
curl_setopt(curlObj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(curlObj, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(curlObj, CURLOPT_HEADER, 0);
curl_setopt(curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
response = curl_exec(curlObj);
curl_close(curlObj);json = json_decode(response);
returnjson[0]->url_long;
}
参考新浪微博的开发文档,推荐使用get方法获取。那个代码更简单
function shorturl(long_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/shorten.json?source='.apiKey.'&url_long='.long_url;response = file_get_contents(apiUrl);json = json_decode(response);
returnjson[0]->url_short;
}
function expandurl(short_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/expand.json?source='.apiKey.'&url_short='.short_url;response = file_get_contents(apiUrl);json = json_decode(response);
returnjson[0]->url_long;
}
好的,是不是更简单了?
调试上述代码时,需要填写自己的API key,否则无法获取。
特别提醒:短地址服务现在只为已经认证的APP KEY提供服务,刚刚申请的APP KEY会提示没有权限。您可以使用 209678993 和 3818214747 这两个键进行测试。这两个密钥的来源未知,不推荐用于生产。 (谢谢提醒)
jucelin写了一个调试文档,可以测试一下:
多头到空头:://
短到长::///S4bLBm
只有2个参数,type:1表示长转短,2表示短转长,后面的URL就是目标域名。因为懒惰,所以没有错误的判断。新浪微博短地址不支持短地址。短地址也应该以这种方式进行逻辑控制。 (不信可以试试)。
更多关于新浪微博短地址接口的说明,请参考“新浪微博短地址接口”。 查看全部
网站调用新浪微博内容(新浪微博短地址接口(API)的简单接入
)
在短地址(也称为短链接、缩短地址等)方面,twitter发展起来后,还在不断发展,很多互联网网站使用短地址,很多在国内和在国外,但稳定稳定的可靠性在国内还是比较靠谱的。我不怕没有墙。几家外国公司已经遭遇了悲剧。因此,如果项目中使用短地址,我还是推荐使用新浪或其他国内短链接服务。
新浪微博短链接API开放,腾讯微博短地址API未开放。本想通过不同的途径获取腾讯微博API,但以失败告终。新浪微博短地址API不需要用户登录,直接调用即可,速度非常快。以下代码来源于网站,使用CURL POST方式供参考。
新浪微博短链接API文档在旧版开发文档中,新版中没有添加:
function shortenSinaUrl(long_url){apiKey='1234567890';//这里是你申请的应用的API KEY,随便写个应用名就会自动分配给你
apiUrl='http://api.t.sina.com.cn/short_url/shorten.json?source='.apiKey.'&url_long='.long_url;curlObj = curl_init();
curl_setopt(curlObj, CURLOPT_URL,apiUrl);
curl_setopt(curlObj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(curlObj, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(curlObj, CURLOPT_HEADER, 0);
curl_setopt(curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
response = curl_exec(curlObj);
curl_close(curlObj);json = json_decode(response);
returnjson[0]->url_short;
}
function expandSinaUrl(short_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/expand.json?source='.apiKey.'&url_short='.short_url;curlObj = curl_init();
curl_setopt(curlObj, CURLOPT_URL,apiUrl);
curl_setopt(curlObj, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(curlObj, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(curlObj, CURLOPT_HEADER, 0);
curl_setopt(curlObj, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
response = curl_exec(curlObj);
curl_close(curlObj);json = json_decode(response);
returnjson[0]->url_long;
}
参考新浪微博的开发文档,推荐使用get方法获取。那个代码更简单
function shorturl(long_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/shorten.json?source='.apiKey.'&url_long='.long_url;response = file_get_contents(apiUrl);json = json_decode(response);
returnjson[0]->url_short;
}
function expandurl(short_url){apiKey='1234567890';//要修改这里的key再测试哦
apiUrl='http://api.t.sina.com.cn/short_url/expand.json?source='.apiKey.'&url_short='.short_url;response = file_get_contents(apiUrl);json = json_decode(response);
returnjson[0]->url_long;
}
好的,是不是更简单了?
调试上述代码时,需要填写自己的API key,否则无法获取。
特别提醒:短地址服务现在只为已经认证的APP KEY提供服务,刚刚申请的APP KEY会提示没有权限。您可以使用 209678993 和 3818214747 这两个键进行测试。这两个密钥的来源未知,不推荐用于生产。 (谢谢提醒)
jucelin写了一个调试文档,可以测试一下:
多头到空头:://
短到长::///S4bLBm
只有2个参数,type:1表示长转短,2表示短转长,后面的URL就是目标域名。因为懒惰,所以没有错误的判断。新浪微博短地址不支持短地址。短地址也应该以这种方式进行逻辑控制。 (不信可以试试)。
更多关于新浪微博短地址接口的说明,请参考“新浪微博短地址接口”。
网站调用新浪微博内容(当浏览器向服务器发送请求的时候,发出http请求消息报文)
网站优化 • 优采云 发表了文章 • 0 个评论 • 52 次浏览 • 2022-03-21 23:41
浏览器向服务器发送请求时,发出HTTP请求消息,服务器返回数据时,发出HTTP响应消息。两种类型的消息都由一个起始行、一个消息头、一个指示头结束的空行和一个可选的消息体组成。 http请求消息中,起始行包括请求方法、请求的资源、HTTP协议的版本号,消息头收录各种属性,消息体收录数据,GET请求没有消息体,所以它在邮件标题后的空白行中。没有其他数据。在Http响应消息中,起始行收录HTTP协议版本、HTTP状态码和状态,消息头收录各种属性,消息体收录服务器返回的数据内容。
下图展示了从fiddler捕获的http请求和http响应。 GET请求的内容是空的,所以消息头和消息体后面的空行都是空的。
服务器发送的响应消息如下,浏览器正常接收到服务器发送的http消息
从上面可以看出,在http请求和http响应的头部信息中,cookie是消息头的一个非常重要的属性。
什么是 cookie?
当用户第一次通过浏览器访问域名时,被访问的WEB服务器会向客户端发送数据,维护WEB服务器和客户端之间的状态。这些数据是由 Internet 站点创建的 cookie。存储在用户本地终端上以识别用户身份的数据,cookie中的信息一般都是加密的,cookie存储在缓存或硬盘中,而硬盘是一些小的文本文件,当您访问网站,会读取网站对应的cookie信息,cookie可以有效改善我们的上网体验。一般来说,一旦 cookie 保存在您的计算机上,它就只能由创建 cookie 的 网站 读取。
为什么需要 cookie
Http 协议是一种无状态的面向连接的协议。 Http协议基于tcp/ip协议层。客户端与服务器建立连接后,它们之间的 TCP 连接始终保持不变。至于保持时间有多长,由服务器端设置。当客户端再次访问服务器时,会继续使用上次建立的连接。但是,由于Http协议是无状态的,WEB服务器并不知道这一点。两个请求是否是同一个客户端,这两个请求是独立的。为了解决这个问题,web程序引入了cookie机制来维护状态。 cookie 可以记录用户的登录状态。通常,Web服务器会在用户登录成功后进行签名,以标记会话的有效性,这样可以多次节省用户。验证并登录 网站。记录用户的访问状态。
cookie 的类型
会话Cookie(Session Cookie):这种类型的cookie只在会话期间有效,存储在浏览器的缓存中。当用户访问网站时,会创建一个会话cookie,当浏览器关闭时,会被浏览器移除。
持久性Cookie(Persistent Cookie):这种类型的cookie在用户会话中长期有效。当您将 cookie 的属性 Max-Age 设置为 1 个月时,该 cookie 将收录在该月相关 URL 的每个 http 请求中。所以它可以记录很多用户初始化或者自定义的信息,比如第一次登录的时间,弱登录的状态等。
Secure cookie:Secure cookie是https访问下的cookie形式,保证cookie在从客户端传递到服务器的过程中始终被加密。
HttpOnly Cookie:这种类型的cookie只能在http(https)请求上传递,对客户端脚本语言无效,从而有效避免跨站攻击。
第三方cookie:第一方cookie是在当前访问的域名或子域下生成的cookie。
第三方 cookie:第三方 cookie 是由第三方域创建的 cookie。
饼干成分
Cookie是HTTP消息头中的一个属性,包括:Cookie名称(Name)、Cookie值(Value)、Cookie过期时间(Expires/Max-Age)、Cookie函数路径(Path)、 cookie 位于(域),使用 cookie 进行安全连接(安全)。
前两个参数是cookie应用的必要条件。此外,还包括cookie大小(大小,不同浏览器对cookie的数量和大小有不同的限制)。
python模拟登录
设置一个cookie处理对象,负责给http请求添加cookie,可以从http响应中获取cookie,向网站登录页面发送请求,包括登录url、POST请求数据,Http头使用urllib2.urlopen发送请求,接收WEB服务器的Response。
首先我们看登录页面源码
当我们使用urllib处理url的时候,实际上是通过urllib2.OpenerDirector的实例来工作的,它会自己调用资源来执行各种操作,比如传递协议、打开url、处理cookie等。而urlopen 方法使用默认打开器来处理问题,基本的 urlopen() 函数不支持身份验证、cookie 或其他高级 HTTP 函数。要支持这些功能,您必须使用 build_opener() 函数来创建您自己的自定义 Opener 对象。
cookielib 模块定义了自动处理 HTTP cookie 的类,并用于访问那些需要 cookie 数据的类网站。 cookielib 模块包括 CookieJar、FileCookieJar、CookiePolicy、DefaultCookiePolicy、Cookie 以及 FileCookieJar 的子类 MozillaCookieJar 和 LWPCookieJar,CookieJar 对象可以管理 HTTP cookie,向 http 请求添加 cookie,以及从 http 响应中获取 cookie。 FileCookieJar 对象主要是从文件中读取cookies或者创建cookies。其中,MozillaCookieJar 用于在 Mozilla 浏览器中创建 cookies.txt。兼容FileCookieJar实例,LWPCookieJar就是创建一个兼容libwww-perl的Set-Cookie3文件格式的FileCookieJar实例,用LWPCookieJar保存的cookie文件便于人阅读。默认是 FileCookieJar 没有保存功能,已经实现了 MozillaCookieJar 或 LWPCookieJar。所以你可以使用MozillaCookieJar或者LWPCookieJar来自动实现cookie保存。
[蟒蛇]
#! /usr/bin/env python#coding:utf-8import sysimport reimport urllib2import urllibimport requestsimport cookielib##这段代码用来解决中文报错reload(sys)sys的问题。 setdefaultencoding("utf8")########################################## ########## 登录人人网 loginurl = '#x27;logindomain = '人人网. com'class Login(object): def __init__(self):self.名称=''自己。 passwprd = ''自己。域=''自己。 cj = cookielib。 LWPCookieJar() 自我。开瓶器=urllib2。 build_opener(urllib2.HTTPCookieProcessor(self.
cj))urllib2. install_opener(self.opener) def setLoginInfo(self,username,password,domain):'''''设置用户登录信息'''self.名称 = 用户名自己。密码=密码自己。 domain = domain def login(self):'''''login网站'''loginparams = {'domain':self.域,'电子邮件':自己。名称,“密码”:自我。 pwd}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.
0.1650.57 Safari/537.36'}req = urllib2.请求(登录网址,urllib.urlencode(登录参数),标头=标头)响应= urllib2。 urlopen(req)self.操作=自我。开瓶器。打开(请求)页面=响应。 read()if __name__ == '__main__': userlogin = Login() username = 'username' password = 'password' domain = logindomain userlogin. setLoginInfo(username,password,domain) 用户登录。 login() 模拟登录新浪微博(Python)
PC登录新浪微博时,用户名和密码在客户端用js预加密,一组参数在POST之前是GET,也是POST_DATA的一部分。这样一来,就无法以通常的简单方式来模拟一个 POST 登录(如人人网)。由于使用API获取部分要使用的微博数据不方便,所以需要自己写一个小爬虫,模拟登录必不可少。琢磨了一下这件事,终于成功登录了。 1、在提交POST请求之前,需要GET获取两个参数。地址为:(v1.3.18) 得到的数据中收录“servertime”和“nonce”的值,都是随机的,其他的值好像2、通过httpfox观察POST数据,参数比较复杂,其中“su”为加密后的用户名,“sp”为加密后的密码,“servertime”和“nonce”都是上一步得到的。其他参数不变,BASE64计算: username = base64.encodestring( urllib.quote(username) )[:-1];密码经过SHA1 3次加密,加上servertime和nonce的值干扰。
即:经过两次SHA1加密后,将servertime和nonce的值加到结果中,再次进行SHA1计算。组织好参数,POST请求。在此之后,登录并没有成功。 POST后得到的内容收录语句location.replace(";callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4 %ED%CE%F3");这是登录失败时的结果,和登录成功后的结果类似,只不过retcode的值为0。接下来再次请求这个URL,这样就可以成功登录微博了。记得提前建好缓存。这是完整的代码(未注释,只是看看):#! /usr/bin/env python#coding=utf8import urllibimport urllib2import cookielibimport base64import reimport jsonimport hashlibcj = cookielib.LWPCookieJar()cookie_support = urllib2.HTTPCookieProcessor(cj)opener = urllib2.build_opener(cookie_support, urllib< @2.HTTPHandler)urllib2.install_opener(opener)postdata = {'entry':'weibo','gateway':'1','from':'','savestate':'7', 'userticket':'1','ssosimplelogin':'1','vsnf':'1','vsnval':'','su':'','service':'miniblog','servertime': '','nonce': '','pwencode': 'wsse','sp': '','encoding': 'UTF-8' ,'url': '#x27;,'returntype': 'META '}def get_servertime():url = '(v1.3.18)&_=39'data = urllib2.urlopen(url).read()p =桩('\((.*)\)')try:json_data = p.search(data).group(1)data = json .loads(json_data)servertime = str(data['servertime']) nonce = data['nonce']return servertime, nonceexcept:print 'Get severtime error!'return Nonedef get_pwd(pwd, servertime, nonce):pwd1 = hashlib .sha1(pwd).hexdige st()pwd2 = hash lib.sha1(pwd1).hexdigest()pwd3_ = pwd2 + servertime + noncepwd3 = hashlib.sha1(pwd3_).hexdigest()return pwd3def get_user(username):username_ = urllib.quote(username)username = base64.encodestring(username_)[:-1]return usernamedef login():username = '你的登录邮箱' pwd = '你的密码' url = '(v1. 3. 18)'try:servertime, nonce = get_servertime()except:returnglobal postdatapostdata['servertime'] = servertimepostdata['nonce'] = noncepostdata['su'] = get_user(username)postdata ['sp'] = get_pwd(pwd, servertime, nonce)postdata = urllib.urlencode(postdata)headers = {'User-Agent':'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0'}req = urllib2.Request(url=url,data=postdata,headers=headers)result=urllib 2.@ >urlopen(req)text = result.read()p = pile('location\.replace\(\'(.*?)\'\)')try:login_url = p.search(text) .group(1)#print login_urlurllib2.urlopen(login_url)print "登录成功!"except:print '登录错误!'login()
以上是使用POST用户名/密码等参数(加密)并保存cookies模拟登录的方法。
一般来说,为了保证安全,网站会定期更新登录的详细信息,比如修改参数名,更新加密(hash)算法等。因此,模拟登录的代码肯定会定期失败,但如果 网站 没有进行大更新,它仍然可以使用,只需稍作改动。此外,处理验证码的难度更大。虽然该程序在一定程度上可以识别验证码字符,但目前很难找到一个简单通用的验证码识别程序。
很多豆友反映需要模拟登录新浪微博获取数据。其实对于一般的微博数据获取,比如用户信息、微博内容等,使用微博开放平台API是更明智的选择:速度更快,节省了大量的网页处理工作量。对于不开放API的数据,我们采用模拟登录的方式。熟悉网络的朋友只要定期维护模拟登录的代码,总能成功登录微博。如果不是那么熟悉,其实可以用一个比较天真的思路来解决:直接把cookie发到新浪微博,实现模拟登录。 1. 获取cookies非常简单。您可以通过Chrome浏览器的“开发者工具”或火狐浏览器的“HTTPFOX”等插件直接查看您的新浪微博cookies。 (注意:不要泄露这个私有 cookie!)
比如Chrome视图cookies(快捷键F12可以调出chrome开发者工具)
chrome 中的 cookie
2、提交cookie作为访问微博的header参数 headers = {'cookie': 'your cookie'}req = urllib2.Request(url, headers=headers) #每次访问页面,带上 headers 参数 r = urllib2.urlopen(req) 看具体代码:
本文分享自微信公众号-大数据挖掘DT数据分析(datadw)
原文出处及转载信息在文中有详述。如有侵权,请联系我们删除。 查看全部
网站调用新浪微博内容(当浏览器向服务器发送请求的时候,发出http请求消息报文)
浏览器向服务器发送请求时,发出HTTP请求消息,服务器返回数据时,发出HTTP响应消息。两种类型的消息都由一个起始行、一个消息头、一个指示头结束的空行和一个可选的消息体组成。 http请求消息中,起始行包括请求方法、请求的资源、HTTP协议的版本号,消息头收录各种属性,消息体收录数据,GET请求没有消息体,所以它在邮件标题后的空白行中。没有其他数据。在Http响应消息中,起始行收录HTTP协议版本、HTTP状态码和状态,消息头收录各种属性,消息体收录服务器返回的数据内容。
下图展示了从fiddler捕获的http请求和http响应。 GET请求的内容是空的,所以消息头和消息体后面的空行都是空的。
服务器发送的响应消息如下,浏览器正常接收到服务器发送的http消息
从上面可以看出,在http请求和http响应的头部信息中,cookie是消息头的一个非常重要的属性。
什么是 cookie?
当用户第一次通过浏览器访问域名时,被访问的WEB服务器会向客户端发送数据,维护WEB服务器和客户端之间的状态。这些数据是由 Internet 站点创建的 cookie。存储在用户本地终端上以识别用户身份的数据,cookie中的信息一般都是加密的,cookie存储在缓存或硬盘中,而硬盘是一些小的文本文件,当您访问网站,会读取网站对应的cookie信息,cookie可以有效改善我们的上网体验。一般来说,一旦 cookie 保存在您的计算机上,它就只能由创建 cookie 的 网站 读取。
为什么需要 cookie
Http 协议是一种无状态的面向连接的协议。 Http协议基于tcp/ip协议层。客户端与服务器建立连接后,它们之间的 TCP 连接始终保持不变。至于保持时间有多长,由服务器端设置。当客户端再次访问服务器时,会继续使用上次建立的连接。但是,由于Http协议是无状态的,WEB服务器并不知道这一点。两个请求是否是同一个客户端,这两个请求是独立的。为了解决这个问题,web程序引入了cookie机制来维护状态。 cookie 可以记录用户的登录状态。通常,Web服务器会在用户登录成功后进行签名,以标记会话的有效性,这样可以多次节省用户。验证并登录 网站。记录用户的访问状态。
cookie 的类型
会话Cookie(Session Cookie):这种类型的cookie只在会话期间有效,存储在浏览器的缓存中。当用户访问网站时,会创建一个会话cookie,当浏览器关闭时,会被浏览器移除。
持久性Cookie(Persistent Cookie):这种类型的cookie在用户会话中长期有效。当您将 cookie 的属性 Max-Age 设置为 1 个月时,该 cookie 将收录在该月相关 URL 的每个 http 请求中。所以它可以记录很多用户初始化或者自定义的信息,比如第一次登录的时间,弱登录的状态等。
Secure cookie:Secure cookie是https访问下的cookie形式,保证cookie在从客户端传递到服务器的过程中始终被加密。
HttpOnly Cookie:这种类型的cookie只能在http(https)请求上传递,对客户端脚本语言无效,从而有效避免跨站攻击。
第三方cookie:第一方cookie是在当前访问的域名或子域下生成的cookie。
第三方 cookie:第三方 cookie 是由第三方域创建的 cookie。
饼干成分
Cookie是HTTP消息头中的一个属性,包括:Cookie名称(Name)、Cookie值(Value)、Cookie过期时间(Expires/Max-Age)、Cookie函数路径(Path)、 cookie 位于(域),使用 cookie 进行安全连接(安全)。
前两个参数是cookie应用的必要条件。此外,还包括cookie大小(大小,不同浏览器对cookie的数量和大小有不同的限制)。
python模拟登录
设置一个cookie处理对象,负责给http请求添加cookie,可以从http响应中获取cookie,向网站登录页面发送请求,包括登录url、POST请求数据,Http头使用urllib2.urlopen发送请求,接收WEB服务器的Response。
首先我们看登录页面源码
当我们使用urllib处理url的时候,实际上是通过urllib2.OpenerDirector的实例来工作的,它会自己调用资源来执行各种操作,比如传递协议、打开url、处理cookie等。而urlopen 方法使用默认打开器来处理问题,基本的 urlopen() 函数不支持身份验证、cookie 或其他高级 HTTP 函数。要支持这些功能,您必须使用 build_opener() 函数来创建您自己的自定义 Opener 对象。
cookielib 模块定义了自动处理 HTTP cookie 的类,并用于访问那些需要 cookie 数据的类网站。 cookielib 模块包括 CookieJar、FileCookieJar、CookiePolicy、DefaultCookiePolicy、Cookie 以及 FileCookieJar 的子类 MozillaCookieJar 和 LWPCookieJar,CookieJar 对象可以管理 HTTP cookie,向 http 请求添加 cookie,以及从 http 响应中获取 cookie。 FileCookieJar 对象主要是从文件中读取cookies或者创建cookies。其中,MozillaCookieJar 用于在 Mozilla 浏览器中创建 cookies.txt。兼容FileCookieJar实例,LWPCookieJar就是创建一个兼容libwww-perl的Set-Cookie3文件格式的FileCookieJar实例,用LWPCookieJar保存的cookie文件便于人阅读。默认是 FileCookieJar 没有保存功能,已经实现了 MozillaCookieJar 或 LWPCookieJar。所以你可以使用MozillaCookieJar或者LWPCookieJar来自动实现cookie保存。
[蟒蛇]
#! /usr/bin/env python#coding:utf-8import sysimport reimport urllib2import urllibimport requestsimport cookielib##这段代码用来解决中文报错reload(sys)sys的问题。 setdefaultencoding("utf8")########################################## ########## 登录人人网 loginurl = '#x27;logindomain = '人人网. com'class Login(object): def __init__(self):self.名称=''自己。 passwprd = ''自己。域=''自己。 cj = cookielib。 LWPCookieJar() 自我。开瓶器=urllib2。 build_opener(urllib2.HTTPCookieProcessor(self.
cj))urllib2. install_opener(self.opener) def setLoginInfo(self,username,password,domain):'''''设置用户登录信息'''self.名称 = 用户名自己。密码=密码自己。 domain = domain def login(self):'''''login网站'''loginparams = {'domain':self.域,'电子邮件':自己。名称,“密码”:自我。 pwd}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.
0.1650.57 Safari/537.36'}req = urllib2.请求(登录网址,urllib.urlencode(登录参数),标头=标头)响应= urllib2。 urlopen(req)self.操作=自我。开瓶器。打开(请求)页面=响应。 read()if __name__ == '__main__': userlogin = Login() username = 'username' password = 'password' domain = logindomain userlogin. setLoginInfo(username,password,domain) 用户登录。 login() 模拟登录新浪微博(Python)
PC登录新浪微博时,用户名和密码在客户端用js预加密,一组参数在POST之前是GET,也是POST_DATA的一部分。这样一来,就无法以通常的简单方式来模拟一个 POST 登录(如人人网)。由于使用API获取部分要使用的微博数据不方便,所以需要自己写一个小爬虫,模拟登录必不可少。琢磨了一下这件事,终于成功登录了。 1、在提交POST请求之前,需要GET获取两个参数。地址为:(v1.3.18) 得到的数据中收录“servertime”和“nonce”的值,都是随机的,其他的值好像2、通过httpfox观察POST数据,参数比较复杂,其中“su”为加密后的用户名,“sp”为加密后的密码,“servertime”和“nonce”都是上一步得到的。其他参数不变,BASE64计算: username = base64.encodestring( urllib.quote(username) )[:-1];密码经过SHA1 3次加密,加上servertime和nonce的值干扰。
即:经过两次SHA1加密后,将servertime和nonce的值加到结果中,再次进行SHA1计算。组织好参数,POST请求。在此之后,登录并没有成功。 POST后得到的内容收录语句location.replace(";callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4 %ED%CE%F3");这是登录失败时的结果,和登录成功后的结果类似,只不过retcode的值为0。接下来再次请求这个URL,这样就可以成功登录微博了。记得提前建好缓存。这是完整的代码(未注释,只是看看):#! /usr/bin/env python#coding=utf8import urllibimport urllib2import cookielibimport base64import reimport jsonimport hashlibcj = cookielib.LWPCookieJar()cookie_support = urllib2.HTTPCookieProcessor(cj)opener = urllib2.build_opener(cookie_support, urllib< @2.HTTPHandler)urllib2.install_opener(opener)postdata = {'entry':'weibo','gateway':'1','from':'','savestate':'7', 'userticket':'1','ssosimplelogin':'1','vsnf':'1','vsnval':'','su':'','service':'miniblog','servertime': '','nonce': '','pwencode': 'wsse','sp': '','encoding': 'UTF-8' ,'url': '#x27;,'returntype': 'META '}def get_servertime():url = '(v1.3.18)&_=39'data = urllib2.urlopen(url).read()p =桩('\((.*)\)')try:json_data = p.search(data).group(1)data = json .loads(json_data)servertime = str(data['servertime']) nonce = data['nonce']return servertime, nonceexcept:print 'Get severtime error!'return Nonedef get_pwd(pwd, servertime, nonce):pwd1 = hashlib .sha1(pwd).hexdige st()pwd2 = hash lib.sha1(pwd1).hexdigest()pwd3_ = pwd2 + servertime + noncepwd3 = hashlib.sha1(pwd3_).hexdigest()return pwd3def get_user(username):username_ = urllib.quote(username)username = base64.encodestring(username_)[:-1]return usernamedef login():username = '你的登录邮箱' pwd = '你的密码' url = '(v1. 3. 18)'try:servertime, nonce = get_servertime()except:returnglobal postdatapostdata['servertime'] = servertimepostdata['nonce'] = noncepostdata['su'] = get_user(username)postdata ['sp'] = get_pwd(pwd, servertime, nonce)postdata = urllib.urlencode(postdata)headers = {'User-Agent':'Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0'}req = urllib2.Request(url=url,data=postdata,headers=headers)result=urllib 2.@ >urlopen(req)text = result.read()p = pile('location\.replace\(\'(.*?)\'\)')try:login_url = p.search(text) .group(1)#print login_urlurllib2.urlopen(login_url)print "登录成功!"except:print '登录错误!'login()
以上是使用POST用户名/密码等参数(加密)并保存cookies模拟登录的方法。
一般来说,为了保证安全,网站会定期更新登录的详细信息,比如修改参数名,更新加密(hash)算法等。因此,模拟登录的代码肯定会定期失败,但如果 网站 没有进行大更新,它仍然可以使用,只需稍作改动。此外,处理验证码的难度更大。虽然该程序在一定程度上可以识别验证码字符,但目前很难找到一个简单通用的验证码识别程序。
很多豆友反映需要模拟登录新浪微博获取数据。其实对于一般的微博数据获取,比如用户信息、微博内容等,使用微博开放平台API是更明智的选择:速度更快,节省了大量的网页处理工作量。对于不开放API的数据,我们采用模拟登录的方式。熟悉网络的朋友只要定期维护模拟登录的代码,总能成功登录微博。如果不是那么熟悉,其实可以用一个比较天真的思路来解决:直接把cookie发到新浪微博,实现模拟登录。 1. 获取cookies非常简单。您可以通过Chrome浏览器的“开发者工具”或火狐浏览器的“HTTPFOX”等插件直接查看您的新浪微博cookies。 (注意:不要泄露这个私有 cookie!)
比如Chrome视图cookies(快捷键F12可以调出chrome开发者工具)
chrome 中的 cookie
2、提交cookie作为访问微博的header参数 headers = {'cookie': 'your cookie'}req = urllib2.Request(url, headers=headers) #每次访问页面,带上 headers 参数 r = urllib2.urlopen(req) 看具体代码:
本文分享自微信公众号-大数据挖掘DT数据分析(datadw)
原文出处及转载信息在文中有详述。如有侵权,请联系我们删除。
网站调用新浪微博内容( 织梦cms站点内容自动更新到新浪微博推荐学习:htm主页模板 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 221 次浏览 • 2022-03-21 20:07
织梦cms站点内容自动更新到新浪微博推荐学习:htm主页模板
)
DEDEcms网站内容如何自动更新到新浪微博?
DEDEcms网站内容自动更新到新浪微博
推荐学习:织梦cms
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。
以上就是DEDEcms网站内容如何自动更新到新浪微博的详细内容。更多详情请关注php中文网其他相关话题文章!
查看全部
网站调用新浪微博内容(
织梦cms站点内容自动更新到新浪微博推荐学习:htm主页模板
)

DEDEcms网站内容如何自动更新到新浪微博?
DEDEcms网站内容自动更新到新浪微博
推荐学习:织梦cms
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。
以上就是DEDEcms网站内容如何自动更新到新浪微博的详细内容。更多详情请关注php中文网其他相关话题文章!

网站调用新浪微博内容( 织梦DEDECMS站点内容自动更新到新浪微博推荐学习:htm主页模板 )
网站优化 • 优采云 发表了文章 • 0 个评论 • 57 次浏览 • 2022-03-21 19:41
织梦DEDECMS站点内容自动更新到新浪微博推荐学习:htm主页模板
)
织梦如何将网站内容自动更新到新浪微博?
织梦DEDEcms网站内容自动更新到新浪微博
推荐学习:织梦cms
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。
以上就是织梦网站内容如何自动更新到新浪微博的详细内容。更多详情请关注php中文网其他相关话题文章!
查看全部
网站调用新浪微博内容(
织梦DEDECMS站点内容自动更新到新浪微博推荐学习:htm主页模板
)

织梦如何将网站内容自动更新到新浪微博?
织梦DEDEcms网站内容自动更新到新浪微博
推荐学习:织梦cms
新浪微博使用提要查找更新文章。只要给他指定提要地址,就可以成功关联。
现在开始简单地修改织梦的模板。由于织梦无法生成整个站点的xml文件,所以需要先创建一个php程序来生成整个站点的xml。
1.创建feed.php
上面要注意的是修改模板的路径,保证模板和目录下都能找到feed.htm
2. 创建 feed.htm 模板文件
{dede:global.cfg_webname/}
{dede:global.cfg_basehost/}
{dede:global.cfg_description/}
zh-cn
{dede:global.cfg_webname/}
{dede:global.cfg_adminemail/}
{dede:arclist row=’60′ col=’1′ titlelen=’100′ orderby=’pubdate’}
[field:arcurl/]
[field:writer/]
[field:typename/]
[field:pubdate function='strftime("%a, %d %b %Y %H:%M:%S +0800",@me)'/]
[field:arcurl/]
{/dede:arclist}
请务必注意,不要忘记将我的 URL 更改为您需要的。
3.修改index.htm首页模板
由于新浪微博只能验证网址,不能写完整路径,比如我写了:. 结果表明关联失败。解决方法是在中间添加如下代码
通过以上方法,就可以成功关联新浪微博了。
以上就是织梦网站内容如何自动更新到新浪微博的详细内容。更多详情请关注php中文网其他相关话题文章!

网站调用新浪微博内容(使用PHP获取最新微博的函数为__get_weibo)
网站优化 • 优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-03-21 05:13
最近发现推特上的朋友越来越冷清了,大家都无奈的开始使用新浪微博,但是新浪没有开发也没有开放API,这让大家很郁闷。这是我写的一个PHP小函数,可以帮助你在自己的网站上显示和输出最新更新的微博内容。使用PHP获取最新微博的函数是any_get_weibo($sinaId, $listNs) 参数是你的新浪微博 博客号ID和要显示的微博条数,由于新浪小部件的限制,条目不能超过 15...
具体代码如下:
函数 any_get_weibo($sinaId, $listNs){ $output = ''; $getthtm =file_get_contents(''.$sinaId .''); // 这里从新浪微件调用数据源可以减少一定的数据流量。可以避免跳转到着陆页;$tempOp =explode('', $getthtm); for($n = 1; $n = $listNs; $n++){ $tempTs =explode('
', $tempOp[$n]); $output .= ''.$tempTs[0].'/li>'; } $output .='.$sinaId.'/profile">more.../a >'; return $output; }简单说明:通过上面的函数,可以使用any_get_weibo($sinaId, $listNs)函数直接获取你最新的微博内容,这里$sinaId是你的新浪微博ID ID不是个性化域名中的URL,而是1503269170等数字ID,否则可能无法获取数据。数字ID很容易在“关注”或“关注者”的页面地址的URL中找到; $listNs 是你打算获取多少条微博,由于新浪小部件最多只能输出15条微博,所以这个变量不能超过15,否则无法获取。
展开:另外,你还可以从一个案例中得出推论,使用推特提要地址:anyLiv&rpp=1,还可以获取用户名为anyLiv的最新推文内容。这里的这个小功能只是一个简单的实现。原理是把新浪小部件输出的整个页面拉出来,然后按照一定的规则截取你需要的内容。当然,你可以在自己使用的时候添加一些装饰或者截取输出内容的长度。并使用 &showpic=0 参数来控制图片的显示方式等,这取决于你的需要。 查看全部
网站调用新浪微博内容(使用PHP获取最新微博的函数为__get_weibo)
最近发现推特上的朋友越来越冷清了,大家都无奈的开始使用新浪微博,但是新浪没有开发也没有开放API,这让大家很郁闷。这是我写的一个PHP小函数,可以帮助你在自己的网站上显示和输出最新更新的微博内容。使用PHP获取最新微博的函数是any_get_weibo($sinaId, $listNs) 参数是你的新浪微博 博客号ID和要显示的微博条数,由于新浪小部件的限制,条目不能超过 15...
具体代码如下:
函数 any_get_weibo($sinaId, $listNs){ $output = ''; $getthtm =file_get_contents(''.$sinaId .''); // 这里从新浪微件调用数据源可以减少一定的数据流量。可以避免跳转到着陆页;$tempOp =explode('', $getthtm); for($n = 1; $n = $listNs; $n++){ $tempTs =explode('
', $tempOp[$n]); $output .= ''.$tempTs[0].'/li>'; } $output .='.$sinaId.'/profile">more.../a >'; return $output; }简单说明:通过上面的函数,可以使用any_get_weibo($sinaId, $listNs)函数直接获取你最新的微博内容,这里$sinaId是你的新浪微博ID ID不是个性化域名中的URL,而是1503269170等数字ID,否则可能无法获取数据。数字ID很容易在“关注”或“关注者”的页面地址的URL中找到; $listNs 是你打算获取多少条微博,由于新浪小部件最多只能输出15条微博,所以这个变量不能超过15,否则无法获取。
展开:另外,你还可以从一个案例中得出推论,使用推特提要地址:anyLiv&rpp=1,还可以获取用户名为anyLiv的最新推文内容。这里的这个小功能只是一个简单的实现。原理是把新浪小部件输出的整个页面拉出来,然后按照一定的规则截取你需要的内容。当然,你可以在自己使用的时候添加一些装饰或者截取输出内容的长度。并使用 &showpic=0 参数来控制图片的显示方式等,这取决于你的需要。
网站调用新浪微博内容(新浪微博是:新浪微博同步的步骤和验证机制(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 62 次浏览 • 2022-03-20 09:34
最近遇到一个项目,用户的微博信息需要与自己的网站项目同步。好在新浪微博提供了API。我查过了,需要调用信息同步。是的,需要对用户登录进行认证,返回的数据是JSON格式的。
在授权机制的描述中,新浪微博的API中有两种认证机制,分别是:OAuth和Basic Auth。 OAuth 没有仔细研究过,所以忽略它。在Basic Auth授权介绍部分,在cnblogs上提到了一篇文章的文章,这个文章给出了如何以GET方式提交http请求,并给出了返回内容的代码,按照这个文章 然后又找了一篇博文文章:javascript:void(0),这个文章实现了站外发微博的功能。结合这两个文章,实现新浪微博同步功能。
下面介绍实现微博同步的步骤:
1.首先,为了实现http请求,使用System.Net;需要引入命名空间,同时在转换字符集部分和返回内容部分,还需要另外两个命名空间:using System.Text;并使用 System.IO;
然后就可以开始写代码获取json数据了。
(1)准备用户认证数据
string usernamePassword = username + ":" + password;
username是你的微博登录用户名,password是你的博客密码。
(2)准备API的URL。URL中的参数直接以GET的形式附在URL上。一开始的博客园的文章没带一个仔细看,数据里总是返回400错误,后来查了msdn,发现HttpWebRequest的默认请求方式是GET,既然是GET方式,参数应该是URL传的。
string url = "https://api.weibo.com/2/status ... 3B%3B
以上apikey是作为新浪微博用户的开发者申请的,应该是唯一的。博客园里的文章说要发邮件审核。我没有发邮件,直接申请了。拿到APIKEY后也可以同步信息,但是在站外发送微博信息时,来源部分会是:未审核的申请。还有uid、screen_name等参数,具体参数在API文档中有说明。 查看全部
网站调用新浪微博内容(新浪微博是:新浪微博同步的步骤和验证机制(组图))
最近遇到一个项目,用户的微博信息需要与自己的网站项目同步。好在新浪微博提供了API。我查过了,需要调用信息同步。是的,需要对用户登录进行认证,返回的数据是JSON格式的。
在授权机制的描述中,新浪微博的API中有两种认证机制,分别是:OAuth和Basic Auth。 OAuth 没有仔细研究过,所以忽略它。在Basic Auth授权介绍部分,在cnblogs上提到了一篇文章的文章,这个文章给出了如何以GET方式提交http请求,并给出了返回内容的代码,按照这个文章 然后又找了一篇博文文章:javascript:void(0),这个文章实现了站外发微博的功能。结合这两个文章,实现新浪微博同步功能。
下面介绍实现微博同步的步骤:
1.首先,为了实现http请求,使用System.Net;需要引入命名空间,同时在转换字符集部分和返回内容部分,还需要另外两个命名空间:using System.Text;并使用 System.IO;
然后就可以开始写代码获取json数据了。
(1)准备用户认证数据
string usernamePassword = username + ":" + password;
username是你的微博登录用户名,password是你的博客密码。
(2)准备API的URL。URL中的参数直接以GET的形式附在URL上。一开始的博客园的文章没带一个仔细看,数据里总是返回400错误,后来查了msdn,发现HttpWebRequest的默认请求方式是GET,既然是GET方式,参数应该是URL传的。
string url = "https://api.weibo.com/2/status ... 3B%3B
以上apikey是作为新浪微博用户的开发者申请的,应该是唯一的。博客园里的文章说要发邮件审核。我没有发邮件,直接申请了。拿到APIKEY后也可以同步信息,但是在站外发送微博信息时,来源部分会是:未审核的申请。还有uid、screen_name等参数,具体参数在API文档中有说明。