Java调用新浪微博API接口发微博,逐条讲解,绝对清晰

优采云 发布时间: 2021-08-21 01:32

  Java调用新浪微博API接口发微博,逐条讲解,绝对清晰

  Java调用新浪微博API接口发送微博,一一讲解,绝对清晰

  最近在做一个课程设计,用微博控制树莓派,用树莓派控制发光二极管的开和关。主要设计分为两层。上层是使用Java调用新浪微博API实现微博。监控,当我的微博回复时,它会自动读取评论内容,并根据评论指令的内容确定树莓派的控制动作。下层是使用C语言调用操作系统底层接口,通过树莓派GPIO接口来控制发光二极管的闪烁和开启和关闭。

  由于网上教程很老了,而且最近微博界面也发生了很大的变化,所以决定写一篇新的详细的博文。如果能帮到你,那将是我莫大的荣幸。同时也非常希望能与大家交流。如果您有任何问题,请在评论中回复我。

  本文将在最后一步一步讲解如何申请微博接口,以及如何用Java发布自己的微博。 【首先你得有一个微博账号】

  一、申请成为开发者

  在此处申请。点击“我的申请”,您可以看到身份认证:未认证,您已经完成了您应该做的。我不会在这里详细介绍。审稿很快,不到一天就通过了。

  之后应该是这样的(哈哈,欢迎共同粉丝):

  

  二、创建应用程序

  此处的在线教程具有误导性。我跟着那些教程,最终把我拖进了坑里。我已经爬出来了。希望你不要再陷进去了。

  如果要使用Java来控制微博,在创建应用程序时不能创建“站内应用程序”。您必须创建一个“移动应用程序”。请注意这一点,否则您将无法通过授权验证步骤。

  “微连接”-“移动应用”-“立即访问”-“继续创建”

  现在我们来到了填写信息的地方,自己写一个应用名称(以后改名会很麻烦,请一次性填写),例如“手机控制树莓派”,客户端选择“手机”“应用平台只要是Android,但没有效果。然后“创建”。好了,现在我们进入了一个新的界面,我们只是为了测试,因此无需审核,除非您想在线提交申请。

  三、重要信息设置和记录

  这一步很重要,直接关系到以后的正确访问。

  左侧面板:“应用信息”-“高级信息”

  查看“OAuth2.0 授权设置”,点击“编辑”。 “授权回调页面:”和“取消授权回调页面:”非常重要。那些创建了“站内应用”的人应该在这里哭,因为他们不能修改“授权回调页面:”。 . .

  那怎么改呢?两者都改为:这是微博的默认设置,我们测试就够了。

  如图所示:

  

  再次点击“基本信息”,

  如图所示:

  

  注意:APP Key和App Secret,后面会用到。

  四、download 微博Java SDK

  过来

  下载压缩包:weibo4j-oauth2-beta3.1.1.zip

  五、将 SDK 导入 Eclipse

  什么?您是否一直使用文本编辑器来编写 Java?嗯,听我的劝告,我写这东西的时候应该改用Eclipse,不然就累死了。

  打开Eclipse,“文件”-“导入”-“常规下的Existing Projects into Workspace”-“选择归档文件”-选择刚才的SDK压缩包-“完成”。

  导入现已完成。

  六、修改配置信息

  

  打开图中的config.properties文件,将“client_ID”和“client_SERCRET”后面的值改成你记下的“App Key”和“App Secret”。将“redirect_URI”的值更改为

  保存。

  七、应用授权

  如图所示:

  

  编译并执行 OAuth4Code.java 文件。

  您的浏览器将被自动调用以打开授权页面。如下图:

  

  点击“授权”。

  转到下图:

  

  不要急于关闭浏览器!请复制地址栏中code=后面的字符串。

  回到 Eclipse,下面的 Console 里有什么在等着你。完成后按回车。[回车]:

  是的,就是他。粘贴刚刚复制的字符串,然后按 Enter。

  好的,请稍等几秒钟,让您的授权信息返回。

  AccessToken [accessToken=xxxxxxxxxxxxxxx, expireIn=157679999, refreshToken=,uid=xxxxxxxxx]

  “access_token”后面的字符串和“uid”后面的数字很重要,所以写下来。

  现在您可以关闭浏览器了。

  这里提醒一下,如果应用程序是作为“现场应用程序”而不是“移动应用程序”创建的,那么这一步将不会成功。您将始终看到“error:redirect_uri_mismatch”页面。

  八:发微博

  在微博SDK包中,你可以看看examples下的很多程序。这些是示例,涵盖了 SDK 可以执行的所有操作。您只需要参考它们并编写它们即可。

  weibo4j.examples.timeline 包中的UpdateStatus.java 是一个发微博的例子。

  我们在src里面新建了一个叫myweibo的包,下面这些类就不用创建了,随意。

  

  我会演示如何在微博上发帖。

  在我的微博下新建一个类SendWeibo.java

  复制examples-weibo4j.examples.timeline-UpdateStatus.java示例程序中main方法的整个主体,粘贴后Eclipse会自动导入需要引用的包。

  将 String access_token= 替换为您刚才的 access_token 值。 String statuses=您的微博正文如下。

  更改完成后:

  

  然后只要运行这段Java代码,只要不报错就成功了。看看你的微博。

  

<p>注意:如果你不知道什么是函数(我还是习惯叫它函数,而不是方法),也不知道它的参数的含义,请将光标移到函数上。<//p

pimg src='https://www.programminghunter.com/images/138/f7/f758a711d56952f39a3afcf3e786f40a.png' alt=''//p

pSDK中提供的各种功能都非常实用,微博获取什么,获取评论,获取评论ID,回复评论,获取地理位置,获取照片,发布照片,获取粉丝关系,获取朋友圈微博等等。等等,太多了,我们自己试试吧。/p

p九:发布程序:/p

p如果想把程序运行在其他地方,比如树莓派Linux或者虚拟机中的Linux,有几点需要注意。/p

p让我们先发布程序:/p

p我们右击weibo4j-oauth2项目,选择“导出”,然后如图:/p

pimg src='https://www.programminghunter.com/images/391/44/4438e353d2bb3ab0314fca661a57a407.png' alt=''//p

p下一步:/p

pimg src='https://www.programminghunter.com/images/447/a7/a78bc46ab785219a4b7f4f47126f730f.png' alt=''//p

p哪个程序是入口点,启动配置会选择哪个。这里我们正在执行微博程序:SendWeibo。/p

p选择路径,在下方的图书馆办理中选择第二个保险点。然后完成,可能会弹出警告,不要着急,点击确定。/p

p然后就生成了。然后一双击jar包,程序就一闪而过,留下一个weibo.log文件,就是一个日志。如果出现错误,您可以查看日志以查找原因。现在程序执行完毕,它发布了另一个微博。/p

p你可以把这个文件拖到虚拟机的Linux上。我们已经看到 Java 是如何到处运行的。结果运行java -jar 1.jar后报错。发生了什么?/p

p仔细看错误信息,上面写着.UnknownHostException,然后看错误信息中是否写了InetAddress.getLocalHost()方法。没错。/p

p解决方案:/p

p首先,ifconfig,查看你的IP。无论是LAN IP还是外部IP都没有关系。它只需要您看到的本地 IP。/p

p修改host文件/etc/hosts并添加一行,/p

p[普通]/p

p你的 ip 你的主机名#KD.localdomain 是我的主机名/p

p至于如何查看主机名,应该收录在错误信息中,比如localhost.localdomain。 KD.localdomain 是我自己改的。您还可以检查 /etc/hosts 以确认您的主机名。/p

p做完这个修改后,再次尝试运行1.jar,应该可以成功。我不会截图。开启虚拟机很麻烦。/p

pPS:发微博后试一下,不要乱发,这个效果类似刷屏,会被打。/p

p新浪微博的网址是这样的:三部分。/p

p第一部分(绿色部分)是新浪微博的域名,第二部分(红色部分)是博主U​​id,第三部分(蓝色部分)是一串看似随机的字符串。/p

p如果可以通过该方法计算出蓝色字符串与返回数组的对应关系,解决起来就容易多了。/p

p先将蓝色字符串分组,从后到前4个字符,得到如下三组字符:/p

pz/p

p8Elg/p

pBLQ/p

p将它们转换为 62 的十六进制值是 35, 2061702, 8999724 并且将它们组合起来就是一个类似于这个字符串的 35224 字符串/p

p通过发现返回的二维数组中有一个[mid]字段,返回结果为35224.,正好对应。/p

pprespan style="color: #008080;" 1/span span style="color: #0000ff;"package/spanspan style="color: #000000;" step0;

/spanspan style="color: #008080;" 2/span

span style="color: #008080;" 3/span

span style="color: #008080;" 4/span span style="color: #008000;"/**/span

span style="color: #008080;" 5/span span style="color: #008000;" *

/spanspan style="color: #008080;" 6/span span style="color: #008000;" * @ClassName: Mid2IdUtil Java版

/spanspan style="color: #008080;" 7/span span style="color: #008000;" * @Description: 新浪uid转url (id转mid)

/spanspan style="color: #008080;" 8/span span style="color: #008000;" * /spanspan style="color: #808080;"@author/spanspan style="color: #008000;" zeze

/spanspan style="color: #008080;" 9/span span style="color: #008000;" * @date 2016年4月10日 上午10:49:40

/spanspan style="color: #008080;" 10/span span style="color: #008000;" *

/spanspan style="color: #008080;" 11/span span style="color: #008000;"*//span

span style="color: #008080;" 12/span span style="color: #0000ff;"public/span span style="color: #0000ff;"class/spanspan style="color: #000000;" Id2MidUtil {

/spanspan style="color: #008080;" 13/span span style="color: #0000ff;"public/span span style="color: #0000ff;"static/span span style="color: #0000ff;"void/spanspan style="color: #000000;" main(String[] args) {

/spanspan style="color: #008080;" 14/span System.out.println(Uid2Mid("Aw8Wrzaes"span style="color: #000000;"));

/spanspan style="color: #008080;" 15/span System.out.println(Mid2Uid("3676608718380816"));span style="color: #008000;"///spanspan style="color: #008000;"Mid2Id/span

span style="color: #008080;" 16/span span style="color: #000000;" }

/spanspan style="color: #008080;" 17/span span style="color: #0000ff;"private/span span style="color: #0000ff;"static/span String[] str62keys = { "0", "1", "2", "3", "4", "5", "6"span style="color: #000000;",

/spanspan style="color: #008080;" 18/span "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"span style="color: #000000;",

/spanspan style="color: #008080;" 19/span "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w"span style="color: #000000;",

/spanspan style="color: #008080;" 20/span "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J"span style="color: #000000;",

/spanspan style="color: #008080;" 21/span "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W"span style="color: #000000;",

/spanspan style="color: #008080;" 22/span "X", "Y", "Z"span style="color: #000000;" };

/spanspan style="color: #008080;" 23/span

span style="color: #008080;" 24/span span style="color: #0000ff;"public/span span style="color: #0000ff;"static/spanspan style="color: #000000;" String IntToEnode62(Integer int10) {

/spanspan style="color: #008080;" 25/span String s62 = ""span style="color: #000000;";

/spanspan style="color: #008080;" 26/span span style="color: #0000ff;"int/span r = 0span style="color: #000000;";

/spanspan style="color: #008080;" 27/span span style="color: #0000ff;"while/span (int10 != 0span style="color: #000000;") {

/spanspan style="color: #008080;" 28/span r = int10 % 62span style="color: #000000;";

/spanspan style="color: #008080;" 29/span s62 = str62keys[r] +span style="color: #000000;" s62;

/spanspan style="color: #008080;" 30/span int10 = (span style="color: #0000ff;"int/span) Math.floor(int10 / 62.0span style="color: #000000;");

/spanspan style="color: #008080;" 31/span span style="color: #000000;" }

/spanspan style="color: #008080;" 32/span span style="color: #0000ff;"return/spanspan style="color: #000000;" s62;

/spanspan style="color: #008080;" 33/span span style="color: #000000;" }

/spanspan style="color: #008080;" 34/span

span style="color: #008080;" 35/span span style="color: #008000;"///spanspan style="color: #008000;"62进制转成10进制/span

span style="color: #008080;" 36/span span style="color: #0000ff;"public/span span style="color: #0000ff;"static/spanspan style="color: #000000;" String Str62toInt(String str62)

/spanspan style="color: #008080;" 37/span span style="color: #000000;" {

/spanspan style="color: #008080;" 38/span span style="color: #0000ff;"long/span i64 = 0span style="color: #000000;";

/spanspan style="color: #008080;" 39/span span style="color: #0000ff;"for/span (span style="color: #0000ff;"int/span i = 0; i < str62.length(); i++span style="color: #000000;")

/spanspan style="color: #008080;" 40/span span style="color: #000000;" {

/spanspan style="color: #008080;" 41/span span style="color: #0000ff;"long/span Vi = (span style="color: #0000ff;"long/span)Math.pow(62, (str62.length() - i - 1span style="color: #000000;"));

/spanspan style="color: #008080;" 42/span String t = str62.substring(i,i+1span style="color: #000000;");

/spanspan style="color: #008080;" 43/span

span style="color: #008080;" 44/span i64 += Vi *span style="color: #000000;" findindex(t);

/spanspan style="color: #008080;" 45/span span style="color: #000000;" }

/spanspan style="color: #008080;" 46/span span style="color: #008000;"///spanspan style="color: #008000;" System.out.println(i64);/span

span style="color: #008080;" 47/span span style="color: #0000ff;"return/spanspan style="color: #000000;" Long.toString(i64);

/spanspan style="color: #008080;" 48/span span style="color: #000000;" }

/spanspan style="color: #008080;" 49/span

span style="color: #008080;" 50/span span style="color: #0000ff;"public/span span style="color: #0000ff;"static/span span style="color: #0000ff;"int/spanspan style="color: #000000;" findindex(String t)

/spanspan style="color: #008080;" 51/span span style="color: #000000;" {

/spanspan style="color: #008080;" 52/span span style="color: #0000ff;"int/span index=0span style="color: #000000;";

/spanspan style="color: #008080;" 53/span span style="color: #0000ff;"for/span(span style="color: #0000ff;"int/span i=0;istr62keys.length;i++span style="color: #000000;")

/spanspan style="color: #008080;" 54/span span style="color: #000000;" {

/spanspan style="color: #008080;" 55/span span style="color: #0000ff;"if/spanspan style="color: #000000;"(str62keys[i].equals(t)){

/spanspan style="color: #008080;" 56/span index=span style="color: #000000;"i;

/spanspan style="color: #008080;" 57/span span style="color: #0000ff;"break/spanspan style="color: #000000;";

/spanspan style="color: #008080;" 58/span span style="color: #000000;" }

/spanspan style="color: #008080;" 59/span span style="color: #000000;" }

/spanspan style="color: #008080;" 60/span span style="color: #0000ff;"return/spanspan style="color: #000000;" index;

/spanspan style="color: #008080;" 61/span span style="color: #000000;" }

/spanspan style="color: #008080;" 62/span

span style="color: #008080;" 63/span span style="color: #0000ff;"public/span span style="color: #0000ff;"static/spanspan style="color: #000000;" String Uid2Mid(String mid)

/spanspan style="color: #008080;" 64/span span style="color: #000000;" {

/spanspan style="color: #008080;" 65/span String id = ""span style="color: #000000;";

/spanspan style="color: #008080;" 66/span span style="color: #0000ff;"for/span (span style="color: #0000ff;"int/span i = mid.length() - 4; i -4; i = i - 4) span style="color: #008000;"///spanspan style="color: #008000;"从最后往前以4字节为一组读取URL字符/span

span style="color: #008080;" 67/span span style="color: #000000;" {

/spanspan style="color: #008080;" 68/span span style="color: #0000ff;"int/span offset1 = i < 0 ? 0span style="color: #000000;" : i;

/spanspan style="color: #008080;" 69/span span style="color: #0000ff;"int/span len = i < 0 ? mid.length() % 4 : 4span style="color: #000000;";

/spanspan style="color: #008080;" 70/span

span style="color: #008080;" 71/span String str = mid.substring(offset1, offset1+span style="color: #000000;"len);

/spanspan style="color: #008080;" 72/span span style="color: #008000;"///spanspan style="color: #008000;" System.out.println(offset1+" "+len+" "+str);/span

span style="color: #008080;" 73/span

span style="color: #008080;" 74/span str =span style="color: #000000;" Str62toInt(str);

/spanspan style="color: #008080;" 75/span

span style="color: #008080;" 76/span span style="color: #0000ff;"if/span (offset1 > 0) //若不是第一组,则不足7位补0

77 {

78 while (str.length() < 7)

79 {

80 str = "0" + str;

81 }

82 }

83 id = str + id;

84 }

85

86 return id;

87 }

88

89

90 public static String Mid2Uid(String str10) {

91 String mid = "";

92 int count = 1 ;

93 for (int i = str10.length() - 7; i > -7; i = i - 7) // 从最后往前以7字节为一组读取字符

94 {

95 int offset = i < 0 ? 0 : i;

96 int len = i < 0 ? str10.length() % 7 : 7;

97 String temp = str10.substring(offset, offset + len);

98 String url =IntToEnode62(Integer.valueOf(temp));

99 if(count!=3){//z xghm uXym 生成的链接从右往左的前2组,4位一组,不足4位的补0

100 for(int j=0;j

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线