Ich wollte schon immer Java-Multi-Threading-Daten praktizieren.
Eines Tages entdeckte ich, dass die offizielle Website von Rings Duoduo (http://www.houjiduoduo.com/main/) eine große Datenmenge hat.
Indem Sie ihre Front-End-Ajax beobachten, um Klingeltondaten zu erhalten
http://www.shoujiduoduo.com/ringweb/ringweb.php?type=getList&listID= id} & page = {Pagination Page Nummer}}
Es ist leicht zu ermitteln, dass Sie durch Ändern der ListID und Seite die JSON -Daten des Klingeltons vom Server abrufen und die JSON -Daten analysieren.
Sie können sehen, dass sie alle Anweisungen wie {"Hasmore": 1, "Curpage": 1} haben. Durch die Beurteilung des Wertes von Hasmore entscheiden wir, ob wir die nächste Seite kriechen sollen.
Die Download -Adresse in JSON, die über den obigen Link ohne Klingeltöne zurückgeführt wurde, ist jedoch in JSON nicht verfügbar
Sie werden bald feststellen, dass Sie es sehen werden, indem Sie auf den "Download" auf der Seite klicken.
Über die folgende Anfrage können Sie die Download -Adresse des Klingeltons erhalten
http://www.shoujiduoduo.com/ringweb/ringweb.php?type=geturl&act=down&rid= id}
Daher können ihre Daten leicht gestohlen werden. Also fing ich an ...
Der Quellcode wurde auf GitHub veröffentlicht. Wenn Sie sich für Kinderschuhe interessieren, schauen Sie sich bitte an
Github: https://github.com/yongbo000/duoduoaudiorobot
Auf Code:
Paket me.yongbo.duoduororingrobot; import Java.io.buffenedReader; Import Java.io.file; Import Java.io.FileWriter; Import Java.io.ioException; Import Java.io.inputstream; Import Java.inputstream.imreader; java.util.iterator; import Java.util.regex.matcher; import Java.util.regex.pattern; Import com.google.gson.gson; 2013/4/16 * * * */public class DuoduoringRobotclient Implements Runnable {public static String get_ringInfo_url = "http://www.shoujiduoduo.com/ringweb/ringweb.php?type=GELISTILISTIGED=%1Und=%1up "page=%2 hle "http://www.shoujiduoduo.com/ringweb/ringweb.php?type=getUrl&act=down&rid=%Und";public static String error_msg =" Ein Fehler aufgetreten mit listId von %1 $ D wurde automatisch gestoppt. ListId: %1 $ D, aktuelle Seite: %2 $ d "; public static String file_dir =" e:/ringdata/"; public static String file_name =" listId = %1 $ d.txt "; Menu ID * @param page Start page number* @param endPage End page number* */public DuoduoRingRobotClient(int listId, int beginPage, int endPage) {this.listId = listId;this.page = beginPage;this.endPage = endPage;this.dbHelper = new DbHelper();}/** * Constructor* @param listId Menu ID * @param page Start page Nummer**/public duoduororingRobotClient (int listId, int page) {this (listId, Seite, -1);}/*** RingTone erhalten**/public void getrings () {String url = string.format (get_ringinfo_url, listId, page); String reaging = httpget (Url); GetNextPage (respotsESTR); httpget (string weburl) {url url; urlConnection conn; StringBuilder sb = new StringBuilder (); String resultStr = ""; try {url = new url (weburl); conn = url.openconnection (); conn.connect (); InputStream = conn.getInputStream (); InputStream; InputStreamReader (IS); BufferedReader bufeader = neuer BufferedReader (ISR); String -Linetext; while ((linEText = bufreader.readline ()! Objekt und speichern Sie es in txt* @param json json String**/public void ringparse (String json) {Ring Ring = null; (it.hasnext () &&! Fehlerflag) {JsonElement e = it.next (); // JsonElement in Javabean -Objekt Ring = Gson.fromjson (e, Ring.Class); Ring.Setdownurl (GetRingdownurl (Ring.getId ())); {System.out.println (ring.toString ()); // Sie können wählen, ob Sie in die Datenbank schreiben oder an Text // writeTofile (ring.toString ()) schreiben können; WriteTodatabase (Ring);}}}}/** * Write to txt listId); Datei Dir = neue Datei (Datei_dir); Datei = neue Datei (Path); FileWriter fw = null; if (! dir.exists ()) {dire.mkdirs ();} try {if (! file.exists ()) {Datei.CreateNewFile (); true); fw.write (data); fw.write ("/r/n"); fw.flush ();} catch (ioException e) {// todo auto generated catch blocke.printstacktrace ();} schließlich try {if (fw! = null) {fw.close (); Auto-generated catch blocke.printStackTrace();}}}/** * Write to database* @param ring An instance of Ring* */public void writeToDatabase(Ring ring) {dbHelper.execute("addRing", ring);}@Overridepublic void run() {while(hasMore == 1 && !errorFlag){if(endPage ! = -1) {if (page> endpage) {break; }} System.out.println (string.format (status_msg, listId, page)); getrings (); system.out.println (string.format ("Die auf dieser Seite geschriebenen Daten sind abgeschlossen");} System.out.println ("Ending ...");} private int gethasmore (stringsergebr. Muster.comPile ("/" hasmore/": ([0-9]*),/" Curpage/": ([0-9]*)"); Matcher Match = p.matcher (resultStr); if (match.find ()) {return Integer.parseInt (match.group (1)); } return 0;} private int getNextPage (String-resultStr) {muster p = muster.comPile ("/" hasmore/": ([0-9]*),/" Curpage/": ([0-9]*); Stellen Sie fest, ob der aktuelle Ring den Zustand erfüllt. Wenn der Ringname größer als 50 Zeichen ist oder die Dauer eine Dezimalzahl ist, erfüllt er die Bedingungen nicht und wird entfernt. * @param Ringstromringobjektinstanz**/private boolean isAvailabling (Ring Ring) {Muster p = muster. ||.