Last active
July 30, 2016 17:27
-
-
Save e1ectr0cut1e/f627c0aa993b2015d126 to your computer and use it in GitHub Desktop.
ukrposhta.ua tracking script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/python2 | |
| # -*- coding: utf-8 -*- | |
| from sys import stdout, stderr, exit, argv | |
| from codecs import getwriter | |
| from signal import signal, SIGINT | |
| from urllib import urlencode | |
| from urllib2 import build_opener, HTTPCookieProcessor, Request | |
| from cookielib import CookieJar | |
| from bs4 import BeautifulSoup | |
| opener = build_opener(HTTPCookieProcessor(CookieJar())) | |
| base_url = "http://services.ukrposhta.ua/bardcodesingle" | |
| default_url = "/default.aspx" | |
| data_url = "/DownloadInfo.aspx" | |
| def get_form_values(html, barcode): | |
| soup = BeautifulSoup(html, "html5lib") | |
| result = { | |
| 'ctl00$centerContent$scriptManager': 'ctl00$centerContent$scriptManager', | |
| '__EVENTTARGET': '', | |
| '__EVENTARGUMENT': '', | |
| '__VIEWSTATE': soup.find("input", {"name": "__VIEWSTATE"})['value'], | |
| '__VIEWSTATEGENERATOR': soup.find("input", {"name": "__VIEWSTATEGENERATOR"})['value'], | |
| 'ctl00$centerContent$txtBarcode': barcode, | |
| '__ASYNCPOST': 'true', | |
| 'ctl00$centerContent$btnFindBarcodeInfo': 'Пошук' | |
| } | |
| return result | |
| def parse_result(html): | |
| soup = BeautifulSoup(html, "html5lib") | |
| return soup.find("div", {"id": "ctl00_centerContent_divInfo"}).text | |
| def main(): | |
| sout = getwriter("utf8")(stdout) | |
| serr = getwriter("utf8")(stderr) | |
| if (len(argv) < 2): | |
| serr.write('Please provide the tracking number as an argument\n') | |
| exit(1) | |
| headers = { | |
| 'Referer': 'http://services.ukrposhta.ua/bardcodesingle/', | |
| 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36', | |
| 'X-MicrosoftAjax': 'Delta=true' | |
| } | |
| for track_num in argv[1:]: | |
| print track_num | |
| data = get_form_values(opener.open(base_url + default_url).read(), track_num) | |
| opener.open(Request(base_url + default_url, data=urlencode(data), headers=headers)).read() | |
| result = parse_result(opener.open(base_url + data_url + '?id=' + track_num).read()) | |
| sout.write(result + "\n") | |
| if __name__ == "__main__": | |
| def signal_handler(signal, frame): | |
| exit(0) | |
| signal(SIGINT, signal_handler) | |
| main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment