मैंने अक्सर अपने दोस्तों से सुना है कि एक साइट को देखना अच्छा होगा जो
रूसी रेलवे पर मुफ्त स्थान की उपलब्धता की निगरानी करेगा। मैंने खुद से सोचा - "हाँ, यह अच्छा होगा" और सुरक्षित रूप से भूल गया, लेकिन
पोस्ट ने मुझे मेरे पास्ता के कौशल को याद किया, जिसे मैं पूरी तरह से जानता हूं और इस व्यवसाय को पालतू कोड में लपेटता हूं। मैं तुरंत एक आरक्षण कर दूंगा कि यह दूसरे भाग में निगरानी के बारे में होगा, और यह एक अजगर के बारे में रूसी रेलवे में जाने के बारे में होगा, उन्होंने पिछली पोस्ट में किस तरह की रहस्यमय
नींद के बारे में लिखा था और वे Google ऐप इंजन पर कैसे रहते हैं। तो चलिए शुरू करते हैं:

पहले मैंने कोड लिखा था, और फिर मैंने होस्टिंग के बारे में सोचा, बेशक साइट से किसी भी लाभ की उम्मीद नहीं थी, लेकिन केवल 4 मज़ा था, इसलिए होस्टिंग मुफ्त होनी चाहिए, और फिर मुझे
ऐप इंजन के बारे में याद आया। आरंभ करने के लिए, आपको
एसडीके डाउनलोड करना चाहिए। हम शुरू करते हैं, हम भविष्य के आवेदन के लिए एक पथ निर्दिष्ट करते हैं:

निर्दिष्ट कार्य निर्देशिका में, लगभग निम्नलिखित में से
app.yaml सेटिंग
फ़ाइल बनाएँ:
application: rzdzstan1 version: 1 runtime: python27 threadsafe: false api_version: 1 handlers: - url: /favicon.ico static_files: favicon.ico upload: favicon.ico - url: /.* script: web.py libraries: - name: webapp2 version: "latest"
इसके बाद, उपर्युक्त कार्यशील निर्देशिका में,
web.py बनाएं और यहां आप पहले से ही कॉपी-पेस्ट
कोड लिखना शुरू कर सकते हैं। आवेदन हल्के
WebApp2 पर बनाया जाएगा। इसलिए हम मुख्य हैंडलर लिखते हैं:
import webapp2 application = webapp2.WSGIApplication([ ('/', MainPage), ('/trains', TrainListPage), ('/suggester', SuggesterPage), ], debug=True) def main(): application.run() if __name__ == "__main__": main()
इसके अलावा, जैसा कि आधार लेख में कहा गया है, हमें क्वेरी बनाने के लिए शहर कोड की आवश्यकता होगी:
def getCityId(city, s): req = 'http://pass.rzd.ru/suggester?lang=ru&stationNamePart=' + urllib.quote(city.encode('utf-8')) city = city.lower() respData = getResponse(req) rJson = json.loads(respData) for item in rJson: if item['name'].lower() == city: s.response.out.write(u': '+item['name']+' -> '+str(item['id'])+'<br>') return str(item['id']) s.response.out.write(u' : '+city+'<br>') s.response.out.write(u' , :<a href="../"></a><br>') for item in rJson: s.response.out.write(item['name']+'<br>') return None
ठीक है, तो यह
छुटकारा पाने के लिए बना रहता है,
SESSION_ID और अंतिम अनुरोध बनाता है, यह नहीं भूलना चाहिए कि रूसी रेलवे अक्सर डिस्कनेक्ट करता है, 500 कोड के साथ प्रतिक्रिया करता है, आदि। यह करने के लिए, हम बैसाखी संचालकों के एक जोड़े को लिखेंगे:
def getResponse(url): good = False while not good: try: resp = opener.open(url, timeout=5) if resp.getcode() in [httplib.OK, httplib.CREATED, httplib.ACCEPTED]: good = True except (urllib2.HTTPError, HTTPException): pass return resp.read() def getResponseStub(url): r = json.loads(getResponse(url)) cnt = 0 while (r['result']!='OK' and cnt < 5): sleep(1) cnt+=1 r = json.loads(getResponse(url)) return r def getFinalRequest(): req1 = 'http://pass.rzd.ru/timetable/public/ru?STRUCTURE_ID=735&layer_id=5371&dir=0&tfl=3&checkSeats=1&\ st0='+st0+'&code0='+id0+'&dt0='+date+'&st1='+st1+'&code1='+id1+'&dt1='+date r = json.loads(getResponse(req1)) if (r['result']=='OK'): s.response.out.write(r['tp'][0]['msgList'][0]['message'])
और परिणामी उत्तर में - अंतिम पार्सिंग झूठ के लिए आपको जो कुछ भी चाहिए। अब रहस्यमय
नींद के बारे में, वह समारोह में चले गए: getResponseStub, तथ्य यह है कि जब हम
req1 का अनुरोध
करते हैं , तो हम आपको निष्पादन कतार में डालने के लिए कहते हैं, और यदि आप तुरंत
req2 पूछते हैं, तो परिणाम अभी तक प्राप्त नहीं हो सकता है। रेडियोधर्मी स्रोत
ध्यान से
डाउनलोड करने के लिए यहां उपलब्ध हैं। आप इसे
यहाँ और
यहाँ कार्रवाई में आज़मा सकते
हैं क्योंकि वहाँ के कोटा छोटे और जल्दी से एक निश्चित प्रभाव के तहत समाप्त हो जाते हैं, और जब इस लेख को मॉडरेट किया जा रहा है, तो मैं कुछ पैसे फेंकने की कोशिश करूंगा ताकि पृष्ठ लंबे समय तक चले। अगले भाग में, हम ईमेल द्वारा वास्तविक अधिसूचना संलग्न करेंगे।