Java simuliert Sina und Tencent melden sich automatisch an und sendet Weibo Funktionen an alle für Ihre Referenz. Der spezifische Inhalt ist wie folgt
1. Vorbereitung
Melden Sie sich einfach an, ohne sich für das Entwicklerkonto von Sina und Tencent zu bewerben. Wenn Sie eine Weibo -Funktion senden müssen, müssen Sie sich für ein Entwicklerkonto von Sina und Tencent bewerben und eine Testanwendung hinzufügen.
Bitte beachten Sie das offizielle Hilfsdokument für den Prozess. Anwendungsadresse: Sina: http://open.weibo.com Tengxun: http://dev.t.qqq.com/
Was wir brauchen, ist der App -Schlüssel, die App Secre und die Redirect_uri. Der Quellcode enthält bereits den Testschlüssel, den ich angewendet habe, aber aufgrund von Einschränkungen kann Ihr Konto jedoch nicht in direktem Zusammenhang mit meinem Schlüssel angemeldet werden.
2. Dinge zu beachten
1) Es ist zu beachten, dass sich der App -Schlüssel, die App Secre und der redirect_uri der Anwendung in der entsprechenden Konfigurationskonfigurationsdatei im Stammverzeichnis des Projekts befinden.
client_id = 1745656892
Client_Sercret = 66056719C1D8CA7BCAF36F411217CEFA
redirect_uri = www.baidu.com
Da redirect_uri nur zum Testen verwendet wird und keine direkte Rückrufseite hat, können Sie hier einfach eine Adresse ausfüllen. Seien Sie jedoch darauf hin, mit der "Rückrufseite" in den Anwendungseinstellungen übereinzustimmen.
2) Das Testkonto im Code muss das Testkonto selbst hinzufügen. Sinas "Anwendungsinformations-Test-Konto"; Tengxuns "Genehmigungskontroll-Erstellung Whitelist". Natürlich ist es auch möglich, das Entwicklerkonto direkt zu verwenden.
3) Senden Sie Weibo, um Sinas Weibo4j-oauth2-beta2.1.1.zip und Tengxuns Java_Sdk_v1.2.1.7z zu zitieren. Die Kernklasse befindet sich unter dem Util -Paket.
3. Schlüsselcode
1) Sina
Paket org.utils; import java.io.ioxception; import Java.util.arrayList; import Java.util.list; import org.apache.commons.httpclient.header; org.apache.commons.httpclient.params.httpMethodparams; import org.apache.http.httpexception; org.core.weibo.sina.model.WeiboException;import org.core.weibo.sina.weibo4j.util.WeiboConfig;/*** * Simulate automatic login and concurrent Weibo* @author zdw * */public class Sina { /*** * Simulate login and get the token after login * @param username Benutzername * @param Passwort Kennwort * @return * @throws httpexception * @throws ioException */ public static AccessToken GetToken (String -Benutzername, String -Passwort) löst httpexception aus, ioException {string client = wiboconfig.getValue ("Client_id"); String recirecturi = wiboconfig.getValue ("redirect_uri"); String url = wiboconfig.getValue ("AuthorizeURL"); Postmethod postmethode = new postmethod (URL); // App Key postmethod.addParameter ("client_id", clientID); // Apps Redirect -Seite postmethod.addparameter ("redirect_uri", redirecturi); // Mock -Anmeldungsparameter // Entwickler oder Testkonto Benutzername und Kennwort postmethod.addParameter ("userId", Benutzername); postMethod.addParameter ("Passwd", Passwort); postmethod.addparameter ("isloginsinsina", "0"); postmethod.addparameter ("action", "subine"); postmethod.addparameter ("response_type", "code"); HttpMethodparams param = postmethod.getParams (); param.setContentCharSet ("utf-8"); // Headerinformationsliste <Header> header = new ArrayList <Header> () hinzufügen; Headers.Add (neuer Header ("Referer", "https://api.weibo.com/Aauth2/authorize?client_id="+ClientID+"&redirect_uri="+Recturi+"&from=sina&responte_type=Code"))); Headers.Add (neuer Header ("Host", "api.weibo.com"); Headers.Add (neuer Header ("User-Agent", "Mozilla/5.0 (Windows NT 6.1; RV: 11.0) Gecko/20100101 Firefox/11.0")); Httpclient client = new httpclient (); Client.GethostConfiguration (). getParams (). SetParameter ("http.default-headers", Header); Client.executemethod (postmethod); int status = postmethod.getStatusCode (); System.out.println (Status); if (Status! = 302) {System.out.println ("Token -Aktualisierung fehlgeschlagen"); null zurückkehren; } // Token -Header -Speicherort = postmethod.getResponseHeader ("Ort"); if (location! = null) {string returl = location.getValue (); int begin = returl.indexof ("code ="); if (begin! = -1) {int end = returl.indexof ("&", begin); if (end == -1) end = returl.length (); String code = returl.substring (begin + 5, Ende); if (code! = null) {oAuth oAuth = new oAuth (); try {accessToken token = oAuth.getAccessTokenByCode (Code); Rückgabe -Token; } catch (Ausnahme e) {e.printstacktrace (); }}}} return null; } / ** * Senden Sie Weibo * @param Token zertifiziertes Token * @param content wibo content * @return * @throws Exception * / public static boolean SinasendWeibo (String Token, String Inhalt) löst Ausnahme aus {boolean Flag = false; Timeline Timeline = new Timeline (); Timeline.client.settoken (Token); try {Timeline.UpDATESTATUS (Inhalt); Flag = wahr; } catch (wiboxception e) {flag = false; System.out.println (E.GetErrorCode ()); } Rückkehrflag; } public static void main (String [] args) löst eine Ausnahme aus {accessToken at = getToken ("xxxx", "xxx"); SINASENDWEIBO (AT.GetAccessToken (), "Test"); }} 2) Tengxun
Paket org.utils; import Java.io.BytearrayoutputStream; Import Java.io.FileOutputStream; Import Java.io.ioxception; import Java.io.outputStream; Import Java.io.unsupportedenException; net.sf.json.jsonObject; import org.apache.http.httpentity; import org.apache.http.httpesponse; import org.apache.http.client.clientProtocolException; import org. org.apache.http.client.methods.httpget; import org.apache.http.impl.client.defaultttpclient; import org.apache.http.util.Entityutils; Imporation org.core.weibo.tencent.api.userapi.userapi.userapi.userapi.userapi.userapi.userapi.userapi.userapi.userapi. org.core.weibo.tencent.oauthv2.oauthv2; import org.core.weibo.tencent public static oauthv2 oAuth = new OAuthv2 (); private static httpclient client = new Defaulthttpclient (); // Initial OAuth -Anwendungsinformationen public static void init (oAuthv2 oAuth) {oAuth.setClientid ("801216331"); OAuth.SetClientSecret ("EA71B26B0CBE5778CDD1C09AD17553A3"); OAuth.setRedirecturi ("http://www.tencent.com/zh-cn/index.shtml"); }/** * * @param qq * http://check.ptlogin2.qqq..com/check?uin= <0}&appid=15000101&r= < GetPassword (String QQ, String -Kennwort, String -VerifyCode) löst die Ausnahme aus (String p = hexchar2Bin (MD5 (Kennwort)); String u = md5 (p + hexchar2Bin (qq.replace ("// x", "") .toUppercase ()); String v = md5 (u + verifyCode.toUppercase ()); Rückkehr v; } public static String md5 (String OriginalText) löst Ausnahme aus {byte buf [] = originalText.getBytes ("ISO-8859-1"); StringBuffer hexstring = new StringBuffer (); String result = ""; String digit = ""; try {MessagedIGest algorithmus = MessagedIGest.getInstance ("md5"); algorithm.reset (); Algorithm.update (BUF); byte [] digest = algorithm.Digest (); für (int i = 0; i <digest.length; i ++) {digit = integer.tohexString (0xff & digest [i]); if (digit.length () == 1) {digit = "0" + digit; } hexstring.Append (Ziffer); } result = hexstring.toString (); } catch (Ausnahme ex) {result = ""; } return result.toUppercase (); } public static String hexchar2bin (String md5str) löscht nicht unterstützte AnscodingException. für (int i = 0; i <md5str.length (); i = i + 2) {baos.write ((hexstring.indexof (md5str.charat (i)) << 4 | hexstring .Indexof (md5str.charat (i + 1))); } return New String (baos.tobytearray (), "ISO-8859-1"); }/**** Simulation Login* @param qq qq number* @param password qq password* @throws Exception*/public static void Login (String QQ, String Passwort) löst Ausnahme aus {httpget get = new httpget ("https "& appid = 46000101 & ptlang = 2052 & js_type = 2 & js_ver = 10009 & r = 0,7948186025712065"); Httpresponse response = client.execute (get); String entity = entityutils.toString (response.getEntity ()); String [] checknum = entity.substring (entity.indexof ("(") + 1, entity.lastIndexof (")")). Ersetzen ("'", "") .Split (","); String pass = ""; String antwortedata = ""; // den Überprüfungscode abrufen (wenn eine Verifizierungscode -Ausgabe in c: /code.jpg vorhanden ist, geben Sie ihn ein und führen Sie weiter aus, wenn ("1" .Eequals (checkNum [0])) {// uin ist eine QQ -Nummer oder Weibo Benutzername httpget getImg = new Httpget ("http://captcha.qq.com/getimage?aid=46000101&r=0.347878969909082&uin=" + qq + "& vc_type =" + checknum [1] + "); HttPresponse response2 = client.execute (getImg); OutputStream os = new FileOutputStream ("c: /code.jpg"); byte [] b = entityutils.tobytearray (response2.getEntity ()); OS.Write (B, 0, B.Length); os.close (); Scanner in = neuer Scanner (System.in); antwortedata = in.nextline (); in.close (); } else {antwortedata = checknum [1]; } /** ************************ Encryption password******************************* */ pass = GetPassword(checkNum[2], password, responseData); /** ****************************** Login****************************** */ HttpGet getimg = new HttpGet("https://ssl.ptlogin2.qq.com/login?ptlang=2052&u="+ qq+ "&p="+ pass+ "&verifycode="+ responseData+ "&aid=46000101&target=top&u1=https%3A%2Fopen.t.qq.com%2Fcgi-bin%2Foauth2%2Fauthorize%3Fclient_id%3D" + oAuth.getClientId()+ "%26response_type%3Dcode%26redirect_uri="+ oAuth.getRedirecturi ()+ "& pTRedirect = 1 & H = 1 & from_ui = 1 & dumy = & qlogin_param = abbFew = DDD & Worting =%e6%8e%88%e6%9d %83 & fp = loginEroralert & action = 8-13-240977 & g = 1 & t = 1 & dummy = & js_type = 2 & js_ver = 10009 "); HttPresponse response2 = client.execute (getImg); Httpentity httpentity = response2.getEntity (); String entityxc = entityutils.toString (httpentity); System.out.println (EntityXC); } /** * * Anfrage Weibo Plattform -Anwendung anfordern, um zur Seite der Anmeldemacherschaft zurückzukehren. Wenn jedoch kein SessionKey vorhanden ist, ist das Login niemals erfolgreich. SessionKey wird in der URL gefunden, die in einem Eingabetag auf der zurückgegebenen Seite platziert ist, sodass Sie diesen SessionKey erhalten müssen. In fact, you can directly access the URL in the tag and jump */ public static String getUrl() throws ClientProtocolException, IOException { HttpGet getcode = new HttpGet("https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id="+ oAuth.getClientId()+ "& response_type = code & redirect_uri =" + oauth.getRedirecturi () + "& checkstatus = yes & appfrom = & g_tk & checkType = showAuth & state ="); HttPresponse response3 = client.execute (getCode); Httpentity entityqqq = response3.getEntity (); String entityxcc = entityutils.toString (EntityQQQ); String form = entityxcc.substring (entityxcc.indexof ("<form"), entityxcc .Indexof ("</form>")); String [] ss = form.split ("/>"); String input = ""; für (int i = 0; i <ss.Length; i ++) {if (ss [i] .Indexof ("name =/" u1/"")> 0) {input = ss [i]; }; } return input.substring (input.indexof ("value =/" ") + 7, input.indexof ("/"type =/" ");}/** * Parse und Set token * @param Get * @throws Exception */public static void setzte (httpget) throws Exception {htttpePress4 = client.exec (Get); = response4.getEntity (); String entity = getUrlCode.substring (geturlcode.indexof ("url ="), getUrlcode.indexof ("/"> ")); StringBuffer sb = new StringBuffer (); String [] arr = entity.split ("//?") [1] .Split ("&"); für (int x = 0; x <arr.Length; x ++) {if (arr [x] .Indexof ("Code")> = 0 || arr [x] .Indexof ("openID")> = 0 || arr [x] .Indexof ("OpenKey")> = 0) {sb.append (arr [x]+"&"); }; } // Code verwenden, um accessToken oAuthv2client.ParseAuthorization (sb.substring (0, sb.length () - 1), oAuth) zu erhalten; oAuth.setgrantType ("autorize_code"); OAuthv2client.accessToken (OAuth); } /**** rufen Sie (Tengxun Open Platform -Kontoschnittstelle) an, um die Informationen einer Person zu erhalten Wenn Sie das Token erhalten, bedeutet dies, dass das Login erfolgreich ist und Sie den nächsten Vorgang ausführen können. System.out.println ("token ="+oauth.getAccessToken ()); Userapi getUser = new UserAPi (oAuth.getOAuthversion ()); String userjson = getUser.otherInfo (oauth, "json", "", oAuth.getOpenid ()); JsonObject userJsonObject = jsonObject.fromObject (userJson); Integer errcode = (Integer) userJsonObject.get ("errcode"); if (errcode == 0) {jsonObject userDatajsonObject = (jsonObject) userJsonObject.get ("Daten"); System.out.println (userDatajsonObject.toString ()); }} public static void main (String [] args) löst eine Ausnahme aus {init (oAuth); login ("123145", "xxxx"); Httpget get = new httpget (getUrl ()); sorgfältig (bekommen); GetInfo (); }} 4.. Es wird eine entsprechende Protokollausgabe beim erfolgreichen Senden geben
Sina (letzte Zeile des Protokolls):
2078 Debug [2013-03-14 16:35:29] {"erstellt_at": "Thu 14. März 16:35:30 +0800 2013 "," ID ": 3555791132949940," Mid ":" 3555791132949940 "," IDSTR ":" 3555791132949940 "," Text ":" Test "," Quelle ":": ":
Teng Xun:
Protokollflagger für eine erfolgreiche Anmeldung:
ptuicb ('0', '0', 'https: //open.t.qq.com/cgi-bin/oauth2/authorize? client_id = 801216331 & response_type = code & redirect_uri = http:', '1' 1 ', login erfolgreich erfolgreich!
QHttpClient httpGet [3] Response = {"data":{"birth_day":26,"birth_month":8,"birth_year":2011,"city_code":"2","comp":null,"country_code":"1","edu":null,"email":"","exp":141,"fansnum":..
Die Protokolle sind nicht vollständig aufgeführt, sondern nur als Referenz.
Quellcode herunterladen: http://xiazai.vevb.com/201607/yuanma/sinaandtencent(vevb.com).rar
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.