Vor kurzem habe ich ein öffentliches WeChat-Konto eingerichtet, bei dem ich Bahntickets abfragen muss. Ich habe zuvor eine online verfügbare Schnittstelle verwendet, konnte aber nur Zugfahrpläne finden und 12306 bot keine spezielle Schnittstelle zum Überprüfen von Fahrkarten. Heute fällt mir plötzlich ein, dass ich direkt zu 12306 gegangen bin, um die von der Abfrage zurückgegebenen Datenpakete abzufragen und abzurufen, damit ich die Informationen zu Bahntickets erhalten kann. Hier werde ich mir Notizen über den Prozess zur Erlangung der verbleibenden 12.306 Stimmen machen.
Zuerst habe ich 12306 im Firefox-Browser verwendet, um die verbleibenden Tickets zu überprüfen. Öffnen Sie die Webkonsole von Firefox und wählen Sie im Netzwerk „Anfrage- und Antworttexte aufzeichnen“.
Geben Sie dann die Informationen zum Adressdatum ein und klicken Sie auf der Webseite auf die Schaltfläche „Abfrage“. Die von der Webseite angeforderte Adresse wird dann in der Webkonsole angezeigt:
Es handelt sich um das zweite Element im Bild, bei dem es sich um die tatsächliche Adresse handelt, die das Ereignis verarbeitet, wenn Sie auf die Abfrageschaltfläche klicken. Klicken Sie darauf, um es zu sehen
Anforderungs-URL, Anforderungsheader, Antwortheader und Antworttext. Der Antworttext enthält die von uns benötigten Bahnticketinformationen.
Mit dieser Anforderungs-URL können Sie mit dem eigentlichen Code fortfahren, der ausgeführt werden soll. Es kann festgestellt werden, dass das Format der URL lautet
Die Vorderseite ist die Adresse für die Bearbeitung der Anfrage, und die folgenden Parameter purpose_codes beziehen sich auf Erwachsenentickets (AADULT), Studententickets (versuchen Sie es selbst), queryDate ist das Datum und from_station und to_station sind die Abfahrts- und Ankunftsstationen, wie ihre Namen vermuten lassen . Hier sind Peking und Wuhan als BJP bzw. WHN vertreten.
Im Java-Code können Sie direkt eine https-Anfrage schreiben, um das Informationspaket für Bahntickets zu erhalten.
Kopieren Sie den Codecode wie folgt:
public static List<NewTrain> getmsg(String startCity,String endCity,int isAdult) löst eine Ausnahme aus{
List<NewTrain> trains = new ArrayList<NewTrain>();
String sstartCity = CityCode.format(startCity);
String sendCity = CityCode.format(endCity);
TrustManager[] tm = {new MyX509TrustManager()};
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
// Holen Sie sich das SSLSocketFactory-Objekt vom obigen SSLContext-Objekt
SSLSocketFactory ssf = sslContext.getSocketFactory();
String-Typ = „ADULT“;
if(isAdult == 1){
Typ = "0X00";
}
String urlStr = "https://kyfw.12306.cn/otn/lcxxcx/query?zweck_codes="+type+"&queryDate=2014-04-27&from_station="+sstartCity+"&to_station="+sendCity;
URL url = neue URL(urlStr);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setSSLSocketFactory(ssf);
InputStreamReader in = new InputStreamReader(con.getInputStream(),"utf-8");
BufferedReader bfreader = new BufferedReader(in);
StringBuffer sb = new StringBuffer();
String line = "";
while ((line = bfreader.readLine()) != null) {
sb.append(line);
}
System.out.println(sb.toString());
}
Der cityCode.format() dieses Codes wurde von mir selbst geschrieben, um den chinesischen Website-Namen in eine Buchstabenkombination umzuwandeln. In den folgenden Zeilen geht es um https-Anfragen. Die URL ist die gerade erhaltene URL. Die nach der Ausführung dieses Codes erhaltene Ausgabe lautet wie folgt:
Es ist leicht zu erkennen, dass es sich bei diesen Daten um JSON-Daten handelt (ich habe einen einfachen Vorgang durchgeführt und ihn gebeten, sie einzeln auszudrucken).
Da es sich um JSON-Daten handelt, ist die Handhabung einfach. Indem Sie ein Datenelement zur Analyse herausnehmen, können Sie die Bedeutung des Schlüsselwerts analysieren. Ich habe nur einige Schlüsselwerte analysiert, die ich benötige
Schreiben Sie dann einfach eine Train-Klasse, um die Informationen zum Zugticket für die spätere Anzeige zu speichern.
Kopieren Sie den Codecode wie folgt:öffentliche Klasse NewTrain {
privater String to_station_name; //Ankunftsort
privater String station_train_code; //Zugnummer
privater String from_station_name; //Abfahrtsort
private String start_time; //Abfahrtszeit
privater String Arrival_time; // Ankunftszeit
privater String lishi; // braucht Zeit
private String zy_num; // Anzahl der Sitzplätze in der ersten Klasse
private String ze_num; // Anzahl der Sitzplätze zweiter Klasse
private String swz_num; // Anzahl der Geschäftssitze
private String gr_num; // Anzahl der Premium-Soft-Sleeper
private String rw_num; // Anzahl der weichen Schläfer
private String rz_num; // Anzahl der Softsitze
private String yw_num; // Anzahl der harten Schläfer
private String yz_num; // Anzahl der harten Sitze
private String tz_num; // Anzahl der Sonderplätze
private String wz_num; // Keine Anzahl an Plätzen
}
Die nächste Arbeit ist sehr einfach: Fügen Sie die JSON-Daten in das Train-Klassenobjekt ein.
Okay, die Grundarbeit ist abgeschlossen, der nächste Schritt besteht darin, die Funktionen in das Projekt zu integrieren.
Eine TXT-Datei, die eine Kombination aus chinesischen Website-Namen und verwendeten Buchstaben enthält (lesen Sie die TXT-Datei, um die Buchstabenkombination zu erhalten, die dem chinesischen Website-Namen entspricht; einige sind möglicherweise unvollständig).