一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java使用新浪微博API通過(guò)賬號(hào)密碼方式登陸微博的實(shí)例

Java使用新浪微博API通過(guò)賬號(hào)密碼方式登陸微博的實(shí)例

2020-04-06 11:15冰凍魚(yú) JAVA教程

這篇文章主要介紹了Java使用新浪微博API通過(guò)賬號(hào)密碼方式登陸微博的實(shí)例,一般來(lái)說(shuō)第三方App都是采用OAuth授權(quán)認(rèn)證然后跳轉(zhuǎn)之類的方法,而本文所介紹的賬號(hào)方式則更具有自由度,需要的朋友可以參考下

今天下了個(gè)新浪微博的API研究研究,目前實(shí)現(xiàn)了發(fā)布微博功能,包括帶圖片的微博。為了安全,新浪微博的API中并沒(méi)有提供用微博帳號(hào)密碼登錄的功能,而是采用OAuth授權(quán),用戶通過(guò)瀏覽器訪問(wèn)新浪網(wǎng)站登錄,登錄成功后,瀏覽器再返回key和secret給程序。

main.xml:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <Button android:layout_width="fill_parent"
 android:layout_height="wrap_content" android:id="@+id/login"
 android:text="登錄" />
 <EditText android:id="@+id/status" android:layout_width="fill_parent"
 android:layout_height="300sp" android:hint="輸入微博消息" />
 <Button android:layout_width="fill_parent"
 android:layout_height="wrap_content" android:id="@+id/send"
 android:text="發(fā)布" />
</LinearLayout>

一個(gè)登錄按鈕,一個(gè)輸入框,一個(gè)發(fā)布按鈕
因?yàn)橐邮諡g覽器返回的數(shù)據(jù),所以,AndroidManifest.xml注冊(cè)Activity的時(shí)候要加個(gè)Intent-Filter

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.pocketdigi.weibo" android:versionCode="1"
 android:versionName="1.0">
 <uses-sdk android:minSdkVersion="7" />
 
 <application android:icon="@drawable/icon" android:label="@string/app_name">
 <activity android:name=".Main" android:label="@string/app_name">
  <intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
  <intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="sina" android:host="weibo" />
  <!-- 監(jiān)控sina://weibo這樣的地址 -->
  </intent-filter>
 </activity>
 </application>
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>

intent-filter必須分成兩段寫(xiě),如果合在一起寫(xiě),就啟動(dòng)不了了。
為了簡(jiǎn)便,直接把新浪Sample里的OAuthConstant類拷過(guò)來(lái):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package weibo4android.androidexamples;
 
import weibo4android.Weibo;
import weibo4android.http.AccessToken;
import weibo4android.http.RequestToken;
 
public class OAuthConstant {
 private static Weibo weibo=null;
 private static OAuthConstant instance=null;
 private RequestToken requestToken;
 private AccessToken accessToken;
 private String token;
 private String tokenSecret;
 private OAuthConstant(){};
 public static synchronized OAuthConstant getInstance(){
 if(instance==null)
  instance= new OAuthConstant();
 return instance;
 }
 public Weibo getWeibo(){
 if(weibo==null)
  weibo= new Weibo();
 return weibo;
 }
 
 public AccessToken getAccessToken() {
 return accessToken;
 }
 public void setAccessToken(AccessToken accessToken) {
 this.accessToken = accessToken;
 this.token=accessToken.getToken();
 this.tokenSecret=accessToken.getTokenSecret();
 }
 public RequestToken getRequestToken() {
 return requestToken;
 }
 public void setRequestToken(RequestToken requestToken) {
 this.requestToken = requestToken;
 }
 public String getToken() {
 return token;
 }
 public void setToken(String token) {
 this.token = token;
 }
 public String getTokenSecret() {
 return tokenSecret;
 }
 public void setTokenSecret(String tokenSecret) {
 this.tokenSecret = tokenSecret;
 }
 
}

接下來(lái)就是最關(guān)鍵的主程序:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package com.pocketdigi.weibo;
 
import java.io.File;
 
import weibo4android.Weibo;
import weibo4android.WeiboException;
import weibo4android.http.AccessToken;
import weibo4android.http.RequestToken;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class Main extends Activity {
 /** Called when the activity is first created. */
 String key = "", secret = "";
 Button login,send;
 EditText status;
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 System.setProperty("weibo4j.oauth.consumerKey", "3997936609");
 System.setProperty("weibo4j.oauth.consumerSecret",
  "8bc9e3bfd6ae8e3b2b8bda9079918950");
 //設(shè)置在新浪應(yīng)用開(kāi)放平臺(tái)申請(qǐng)的應(yīng)用的key和secret
 login=(Button)findViewById(R.id.login);
 send=(Button)findViewById(R.id.send);
 status=(EditText)findViewById(R.id.status);
 login.setOnClickListener(new OnClickListener(){
 
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  login();
  //登錄
  }});
 send.setOnClickListener(new OnClickListener(){
 
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  String text=String.valueOf(status.getText());
  Weibo weibo = new Weibo();
  weibo.setToken(key,secret);
  try {
   //weibo.updateStatus(text);
   //只發(fā)文字
   File f=new File("/sdcard/wallpaper/129567208597069400.jpg");
   weibo.uploadStatus(text,f );
   //發(fā)文字+圖片,這里需要導(dǎo)入commons-httpclient-3.0.1.jar,自己網(wǎng)上下
   //在實(shí)際項(xiàng)目上,最好放Thread里,因?yàn)榘聪氯サ臅r(shí)候按鈕會(huì)卡
  } catch (WeiboException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  }});
 }
 
 @Override
 protected void onStart() {
 // TODO Auto-generated method stub
 super.onStart();
 //啟動(dòng)時(shí)執(zhí)行檢測(cè)是否來(lái)自網(wǎng)頁(yè)登錄返回
 //如果是,獲取key和secret
 //否則讀取SharedPreferences
 //若得不到key和secret,直接跳轉(zhuǎn)登錄
 Uri uri = this.getIntent().getData();
 if (uri != null) {
  //如果是瀏覽器返回
  try {
  RequestToken requestToken = OAuthConstant.getInstance()
   .getRequestToken();
  AccessToken accessToken = requestToken.getAccessToken(uri
   .getQueryParameter("oauth_verifier"));
  OAuthConstant.getInstance().setAccessToken(accessToken);
  // 保存
  Editor sharedata = getSharedPreferences("WeiBo", 0).edit();
  sharedata.putString("key", accessToken.getToken());
  sharedata.putString("secret", accessToken.getTokenSecret());
  sharedata.commit();
  key = accessToken.getToken();
  secret = accessToken.getTokenSecret();
  } catch (WeiboException e) {
  e.printStackTrace();
  }
 } else {
  //如果是用戶自己?jiǎn)?dòng)
  SharedPreferences settings = getSharedPreferences("WeiBo", 0);
  key = settings.getString("key", "");
  secret = settings.getString("secret", "");
 }
 if (key.equals("") || secret.equals("")) {
  Toast.makeText(this, "尚未登錄", Toast.LENGTH_LONG).show();
  login();
  //跳轉(zhuǎn)到瀏覽器登錄
 
 }
 
 }
 public void login(){
   Weibo weibo = OAuthConstant.getInstance().getWeibo();
   RequestToken requestToken;
 try {
  requestToken =weibo.getOAuthRequestToken("sina://weibo");
  //為了避免與同類應(yīng)用沖突,還是自己改下URI吧
  Uri uri2 = Uri.parse(requestToken.getAuthenticationURL()+ "&from=xweibo");
  OAuthConstant.getInstance().setRequestToken(requestToken);
  startActivity(new Intent(Intent.ACTION_VIEW, uri2));
 } catch (WeiboException e) {
  e.printStackTrace();
 }
 }
}

發(fā)圖片需要導(dǎo)入commons-httpclient-3.0.1.jar,否則啟動(dòng)報(bào)錯(cuò),當(dāng)然weibo4android-1.2.0.jar是不可少的

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产一级黄色网 | 日韩在线第一区 | 国产午夜精品久久久久 | 婷婷伊人综合亚洲综合网 | 亚洲国产福利精品一区二区 | 免费真实播放国产乱子伦 | 午夜福利视频极品国产83 | 91视频免费网站 | 欧美成人免费观看bbb | 亚洲国产成人99精品激情在线 | 扒开女人下面使劲桶屁股动漫 | 久久视频这里只精品99热在线观看 | 国产馆在线观看免费的 | 性欧美videofree中文字幕 | 欧美国产日产精品免费视频 | 免费看a片毛片 | 四虎国产精品免费久久麻豆 | 免费一看一级欧美 | 美女机机对机机的视频(免费) | 久久er国产免费精品 | 国产一级片视频 | 无遮挡免费h肉动漫在线观看 | 日韩在线视精品在亚洲 | 国产精品露脸国语对白99 | 91麻豆精品国产自产在线 | 窝窝午夜理伦影院 | 十大免费b2b网站 | jizz农村野外jizz农民 | 亚洲 欧美 日韩 国产 视频 | 四虎色影院| 亚洲视频免费 | 色综合合久久天天综合绕视看 | 亚洲国产精品久久人人爱 | 日本a在线天堂 | 无颜之月5集全免费看无删除 | 欧美成狂野欧美在线观看 | 四虎免费看| bdsm酷刑折磨死美女 | 无罩看奶禁18 | 国产一区二区免费视频 | 成人国产精品视频频 |