ロシアのメール追跡の追跡を自動化します

リストから正しいトラックを退屈に選択するのにうんざりしていませんか?

サードパーティのトラッカーが機能しませんか?

それから私たちはあなたに行きます! ©



再び怠けすぎて数十のトラックをチェックし、 ロシアのポスト Webサイトのリストからそれらを選択した後、このプロセスを自動化するソリューションを探し始めました。



フリルの結果



既製のスクリプトをテーマにしたグーグル検索では、「パーティーポリシー」の変更後、ほとんどのユーザーが機能しなくなりました。 古き良きinfo.russianpost.ru/servletへのリンクが機能したときの嬉しい驚きを想像してください! その結果、ファイルからトラックをチェックし、結果を含むページを作成するPythonスクリプトを挿入しました-オンラインチェックへのリンクと、明確にするために送信する最後のアクション。



すべてが非常に簡単です:

*ファイルからトラック番号を読み取ります

*各番号について、HTMLを解析し、ステータスのテーブルの最後から2番目の行(ある場合)を選択します

*結果のHTMLを作成して作成する



私にとっては、これはすべて数時間ごとにcronで始まり、静的ページの1つとしてローカルのLighttpdにプッシュされます。



実際のコード:

#!/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()
      
      







PS :独立した作業として、ハードコーディングされたファイルからではなく、パラメーターによってそれらを転送する読み取りと書き込みを追加できます。 さて、誰かがそれを必要とするなら、出力HTMLの装飾:)



UPD :OPSの名前と操作の属性の出力を追加-明確にするため



All Articles