使用新浪微博开放平台api同步微博内容至自己网站(微博开放平台注册开发者并获取app和appsecret百度很容易)
优采云 发布时间: 2021-09-05 11:23使用新浪微博开放平台api同步微博内容至自己网站(微博开放平台注册开发者并获取app和appsecret百度很容易)
前言:微博开放平台提供了微博数据的api接口。不仅可以直接使用api调用微博服务发布微博和查询微博,更重要的是你可以在你的网站上获得新浪微博@博客api的授权可以调用微博的一些内容,就好像我们在网站@看到好的文章并分享到微博或其他社交网络网站@中,非常方便。
让我们探索下面的秘密。
1.注册开发者,获取应用秘钥和应用秘钥
百度很容易找到微博开放平台的入口,登录微博账号,点击账号头像,会提示编辑开发者信息。
可以看到如下页面,按照提示填写即可,这里紧急联系人可以自己填写,网站@无所谓,自己填写百度即可。
提交后,您需要在我的应用中验证您的真实姓名。上传图片时请耐心等待。有点慢,没有上传进度。上传后点击返回跳转到新页面:
根据需要选择,然后创建您自己的应用程序。至于各个应用术语的含义,我不是很清楚。我选择了另一个应用程序
创建后,您将收到一封收录应用密钥和应用机密的电子邮件。这是获得授权的关键。
2.获取令牌
点击首页的api接口,会跳转到api接口描述文档页面。你会发现这个api有很*敏*感*词*,包括创建微博、删除微博、关注/取消关注等很多接口,但是每个接口都有Token需要访问。令牌从何而来?
首先你需要得到一个code code,其次你需要有一个URL来调用接口(因为我申请的是web应用)。
设置关联网址:
点击您的应用名称,然后在左侧菜单中找到高级信息,然后您可以对其进行编辑。
在api界面下点击
,进入授权界面查看使用情况
根据例子,你需要发送一个收录client_id和redirect_uri的get请求。可以直接拼接。
https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code
其中client_id是你申请的app key,redirect_uri是你要回调的接口地址,api会原样返回。可以直接在浏览器中输入url,如下图:
这个页面熟悉吗?授权后网页会跳转回redirect_uri页面,url后面会写code。所以代码就在那里
接下来获取授权令牌,第二个授权接口:
页面上有详细的用法。发送http post请求,我是用java http-client4.5来做的,其实其他方法也可以。
代码写得不好,但或多或少有用。 5 个必需的参数值。我们已经拿到了最后两个,前两个在邮件里。代码将不会发布。打理好自己的打字,熟悉用法,以后难免会提出各种要求。
至此,我们已经授权成功,返回值中收录需要的token值。如果返回错误,请查看错误信息或百度错误信息。
从现在开始,你只需要带上token来请求各种接口。虽然有次数限制,但正常使用应该足够了。
后记:
1. 本来想做一些爬虫类的功能。我想在微博开放界面获取一些数据。不过从API来看,大部分都是基于web应用的微博分享功能。
例如,拥有自己的微博、获得粉丝、发微博、关注等都不是您所需要的。
前面提到的2.,微博开放api主要用于第三方网站@或者app访问微博,用微博登录或者通过api分享微博,所以有这个需求的完全可以拿仔细看看api接口。
在3.api接口中,所有get请求都可以直接拼接字符串获取,但是对于刚请求授权的get请求,需要用户账号同意向应用授权,所以必须登录到用户账号,如果浏览器保留了微博登录的cookie,那么浏览器可以自动登录获取目标码,如果没有,会提示登录
所以这个请求适合在浏览器上做,因为发送带有代码的请求来模拟登录,或者登录后使用cookie是很麻烦的。但是api中的其他get请求不会有这个问题,直接带上token就可以了。模拟登录可以使用selenium的webdriver来获取cookies。其他模拟登录的方法一般都很麻烦。
当然,如果你嵌入网站@,那么登录是用户的事。
4.以发微博为例:
@Test
public void test2() throws IOException {
CloseableHttpClient client = HttpClients.createDefault();
CloseableHttpResponse response = null;
RequestConfig config =
RequestConfig.custom().setConnectTimeout(10000)
.setSocketTimeout(10000).build();
HttpPost post = new HttpPost("https://api.weibo.com/2/statuses/update.json");
post.setConfig(config);
List pairs = new ArrayList();
BasicNameValuePair p1 = new BasicNameValuePair("access_token","");
String content = "本条微博通过微博开放接口发送";
BasicNameValuePair p2 = new BasicNameValuePair("status",
content);
BasicNameValuePair p3 = new BasicNameValuePair("visible","0");
pairs.add(p1);
pairs.add(p2);
pairs.add(p3);
post.setEntity(new UrlEncodedFormEntity(pairs,"utf-8"));
response = client.execute(post);
HttpEntity entities = response.getEntity();
System.out.println(EntityUtils.toString(entities,"UTF-8"));
}
5.如果你在网站@中嵌入了open api,一般做法是:在分享微博按钮(第三方登录按钮)上,发送微博授权认证,用户在网页点击授权后,后台获取code,根据code获取token。之后,如果您需要提取微博的用户名,您可以直接在后台发送请求。如果分享到微博,也可以通过api实现。
如果以后在实践中用到这些功能,请记下。本文到此结束。
来自 Wiz (Wiz)