हम रूसी मेल ट्रैकिंग की ट्रैकिंग को स्वचालित करते हैं

सूची से सही ट्रैक चुनने पर थक गए?
तीसरे पक्ष के ट्रैकर काम नहीं करते हैं?
फिर हम आपके पास जाते हैं! ©

चूंकि मैं एक बार फिर एक दर्जन पटरियों की जांच करने के लिए बहुत आलसी था, उन्हें रूसी पोस्ट वेबसाइट पर एक सूची से चुनकर, मैंने इस प्रक्रिया को स्वचालित करने के लिए किसी भी समाधान की तलाश शुरू कर दी।

तामझाम का नतीजा

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

सब कुछ बेहद सरल है:
* फ़ाइल से ट्रैक नंबर पढ़ें
* प्रत्येक संख्या के लिए, HTML को पार्स करें और स्टेटस की (यदि कोई हो) तालिका की पेनोल्ट पंक्ति का चयन करें
* फॉर्म और परिणामी HTML लिखें

मेरे लिए, यह सब कुछ घंटों के बाद एक बार क्रोन से शुरू होता है और स्थानीय लाइटटैप पर स्थिर पृष्ठों में से एक के रूप में धकेल दिया जाता है।

वास्तव में कोड:
#!/usr/bin/env python # -*- coding: utf-8 -*- import logging import urllib2 import lxml.html as htm import lxml.html.soupparser as soup # Note: internally imports BeautifulSoup import time log = logging.getLogger() POST_URL="http://info.russianpost.ru/servlet/post_item?action=search&searchType=barCode&show_form=no&barCode=%s&page=1" # Track No as parameter TRACK_FILE="tracks.txt" HTML_FILE="index.html" def main(): out = [] # output links tracks = [x.strip() for x in open(TRACK_FILE,'Ur').readlines() if x.strip()] for trk in tracks: log.debug(u"Check tracking #%s" % (trk,)) try: f = urllib2.urlopen(POST_URL % trk) except: log.exception(u"Get info for `%s` failed (open url)" % trk) try: s = f.read() f.close() except: log.exception(u"Get info for `%s` failed (read)" % trk) try: try: x = htm.document_fromstring(s) except: # broken html fallback x = soup.fromstring(s) tbl = x.xpath('/html/body/table[1]') log.debug(u"TBL: %s" % (tbl,)) if tbl: s = '' tr = tbl[0].xpath('tr')[-2].xpath('td') out.append((trk, u"%s: %s (%s %s)" % (tr[1].text, tr[0].text, tr[3].text, tr[4].text))) else: out.append((trk, 'No information available')) except: log.exception(u"") # make output ht = [u"<html>", u"<head><meta http-equiv='content-type' content='text/html;charset=utf-8'/></head>", u"<body>" u"<h2>Tracking info</h2>", u"<h4>Last update: %s" % time.asctime(), u"<h5>Add track numbers into `tracks.txt`</h5><br/>"] for s in out: ht.append( u"<a href='%s'>%s</a>: %s<br/>" % (POST_URL % s[0], s[0],s[1]) ) ht.append(u"</body></html>") with open(HTML_FILE, "w") as f: print >>f , "\n".join(ht).encode('utf-8') log.debug('Done.') if __name__ == "__main__": logging.basicConfig(level=logging.INFO) main() 


पुनश्च : एक स्वतंत्र काम के रूप में, आप हार्ड-कोडित फ़ाइलों से नहीं बल्कि पढ़ना और लिखना जोड़ सकते हैं, लेकिन उन्हें मापदंडों द्वारा स्थानांतरित कर सकते हैं। ठीक है, आउटपुट HTML की सजावट, अगर किसी को इसकी आवश्यकता है :)

UPD : ओपीएस के नाम का जोड़ा आउटपुट और ऑपरेशन की विशेषता - स्पष्टता के लिए

Source: https://habr.com/ru/post/In140319/


All Articles