قمت مؤخرًا بإعداد حساب WeChat عام، والذي يتضمن الاستعلام عن تذاكر القطار، وقد استخدمت واجهة موجودة على الإنترنت من قبل، ولكنها لم تتمكن من العثور إلا على جداول مواعيد القطارات، ولم يوفر 12306 واجهة مخصصة للتحقق من التذاكر. اليوم تذكرت فجأة أنني ذهبت مباشرة إلى 12306 للاستعلام والحصول على حزمة البيانات التي تم إرجاعها بواسطة الاستعلام، حتى أتمكن من الحصول على معلومات تذكرة القطار. وسأقوم هنا بتدوين ملاحظات حول عملية الحصول على الأصوات المتبقية البالغة 12306 صوتًا.
أولاً، استخدمت الرقم 12306 على متصفح Firefox للتحقق من التذاكر المتبقية. افتح وحدة تحكم الويب الخاصة بـ Firefox وحدد "تسجيل أجسام الطلب والاستجابة" في الشبكة
ثم أدخل معلومات تاريخ العنوان وانقر على زر الاستعلام في صفحة الويب، ويمكنك رؤية العنوان الذي طلبته صفحة الويب في وحدة تحكم الويب:
وهو العنصر الثاني في الصورة، وهو العنوان الفعلي الذي يتعامل مع الحدث عند النقر فوق زر الاستعلام. انقر عليه لترى
عنوان URL للطلب ورأس الطلب ورأس الاستجابة ونص الاستجابة يحتوي على معلومات تذكرة القطار التي نحتاجها.
باستخدام عنوان URL للطلب هذا، يمكنك المتابعة إلى الكود الفعلي للتشغيل. يمكن العثور على تنسيق عنوان URL
الواجهة الأمامية هي عنوان معالجة الطلب، وتشير المعلمات التالية request_codes إلى تذاكر البالغين (AADULT)، وتذاكر الطلاب (جربها بنفسك)، وqueryDate هو التاريخ، وfrom_station وto_station هما محطتا المغادرة والوصول كما توحي أسماؤهما. . هنا يتم تمثيل بكين ووهان باسم BJP وWHN على التوالي.
في كود جافا، يمكنك كتابة طلب https مباشرة للحصول على حزمة معلومات تذكرة القطار.
انسخ رمز الكود كما يلي:
قائمة ثابتة عامة <NewTrain> getmsg(String startCity,String endCity,int isAdult) يطرح الاستثناء {
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());
// احصل على كائن SSLSocketFactory من كائن SSLContext أعلاه
SSLSocketFactory ssf = sslContext.getSocketFactory();
نوع السلسلة = "بالغ"؛
إذا (هوالكبار == 1){
اكتب = "0X00"؛
}
String urlStr = "https://kyfw.12306.cn/otn/lcxxcx/query? Purpose_codes = "+type+"&queryDate=2014-04-27&from_station = "+sstartCity+"&to_station = "+sendCity;
URL url = عنوان 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();
سطر السلسلة = ""؛
بينما ((line = bfreader.readLine()) != null) {
sb.append(line);
}
System.out.println(sb.toString());
}
قمت بكتابة cityCode.format() لهذا الكود لتحويل اسم موقع الويب الصيني إلى مجموعة من الحروف، الأسطر التالية تتعلق بطلبات https. عنوان URL هو عنوان URL الذي تم الحصول عليه للتو. الإخراج الذي تم الحصول عليه بعد تنفيذ هذا الرمز هو كما يلي:
من السهل أن ترى أن هذه البيانات عبارة عن أجزاء من بيانات json (لقد قمت بعملية بسيطة وطلبت منه طباعتها واحدة تلو الأخرى).
نظرًا لأنها بيانات json، فمن السهل التعامل معها. من خلال أخذ جزء من البيانات للتحليل، يمكنك تحليل معنى القيمة الأساسية. لقد قمت فقط بتحليل بعض القيم الأساسية التي أحتاجها
ثم قم فقط بكتابة فئة القطار لتخزين معلومات تذكرة القطار لعرضها لاحقًا.
انسخ رمز الكود كما يلي:الطبقة العامة NewTrain {
سلسلة خاصة to_station_name; // مكان الوصول
سلسلة خاصة station_train_code؛ // رقم القطار
سلسلة خاصة from_station_name; // مكان المغادرة
سلسلة خاصة start_time؛ // وقت المغادرة
سلسلة خاصة تصل إلى وقت الوصول //
سلسلة خاصة // تستغرق وقتًا
سلسلة خاصة zy_num; // عدد مقاعد الدرجة الأولى
سلسلة خاصة ze_num; // عدد مقاعد الدرجة الثانية
سلسلة خاصة swz_num؛ // عدد مقاعد العمل
سلسلة خاصة gr_num؛ // عدد العوارض الناعمة المتميزة
سلسلة خاصة rw_num؛ // عدد النائمين الناعمين
سلسلة خاصة rz_num؛ // عدد المقاعد الناعمة
سلسلة خاصة yw_num؛ // عدد الأشخاص الذين ينامون بشدة
سلسلة خاصة yz_num؛ // عدد المقاعد الصلبة
سلسلة خاصة tz_num؛ // عدد المقاعد الخاصة
سلسلة خاصة wz_num؛ // لا يوجد عدد من المقاعد
}
العمل التالي بسيط للغاية، ضع بيانات json في كائن فئة القطار.
حسنًا، لقد اكتمل العمل الأساسي، والخطوة التالية هي دمج الوظائف في المشروع.
ملف txt يحتوي على مجموعة من أسماء المواقع الصينية والحروف المستخدمة (اقرأ ملف txt للحصول على مجموعة الحروف المقابلة لاسم الموقع الصيني، وقد يكون بعضها غير مكتمل