Last active
March 17, 2016 23:19
-
-
Save tanimislam/43a9f20b5ffb76fb6366 to your computer and use it in GitHub Desktop.
This will give you the latest information on your USPS package. Just give it the USPS tracking number of your package, and it will give you a status or summary if valid. Requires PyQt4 and requests to run.
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/env python | |
from PyQt4.QtCore import * | |
from PyQt4.QtGui import * | |
import requests, os, sys | |
from xml.etree import ElementTree | |
""" | |
This will give you the latest information on your USPS package. Just | |
give it the USPS tracking number of your package, and it will give you | |
a status or summary if valid. Requires PyQt4 and requests to run. | |
""" | |
class TracPac( QWidget ): | |
def __init__( self ): | |
super( TracPac, self ).__init__( ) | |
self.setWindowTitle( 'TRACPAC' ) | |
self.trackingNumberLine = QLineEdit( ) | |
self.summaryLine = QTextEdit( ) | |
self.summaryLine.setReadOnly( True ) | |
self.summaryArea = QTextEdit( ) | |
self.summaryArea.setReadOnly( True ) | |
self.setStyleSheet(""" | |
QWidget { | |
font-size: 14pt; | |
font-family: Consolas; | |
}""") | |
qf = QFont( ) | |
qf.setFamily( 'Consolas' ) | |
qf.setPointSize( 14 ) | |
qfm = QFontMetrics( qf ) | |
self.summaryLine.setFixedWidth( 35 * qfm.width( 'A' ) ) | |
self.summaryLine.setFixedHeight( 40 ) | |
# | |
myLayout = QVBoxLayout( ) | |
self.setLayout( myLayout ) | |
# | |
topWidget = QWidget( ) | |
topLayout = QGridLayout( ) | |
topWidget.setLayout( topLayout ) | |
topLayout.addWidget( QLabel( 'TRACKING NO:' ), 0, 0, 1, 1 ) | |
topLayout.addWidget( self.trackingNumberLine, 0, 1, 1, 2 ) | |
myLayout.addWidget( topWidget ) | |
# | |
midWidget = QWidget( ) | |
midLayout = QGridLayout( ) | |
midWidget.setLayout( midLayout ) | |
midLayout.addWidget( QLabel( 'SUMMARY:' ), 0, 0, 1, 1 ) | |
midLayout.addWidget( self.summaryLine, 0, 1, 1, 2 ) | |
myLayout.addWidget( midWidget ) | |
# | |
botWidget = QGroupBox( 'DESCRIPTION' ) | |
botLayout = QHBoxLayout( ) | |
botWidget.setLayout( botLayout ) | |
botLayout.addWidget( self.summaryArea ) | |
myLayout.addWidget( botWidget ) | |
# | |
self.trackingNumberLine.returnPressed.connect( self.processTracking ) | |
quitAction = QAction( self ) | |
quitAction.setShortcuts( ['Ctrl+Q', 'Esc' ] ) | |
quitAction.triggered.connect( sys.exit ) | |
self.addAction( quitAction ) | |
printAction = QAction( self ) | |
printAction.setShortcut( 'Ctrl+P' ) | |
def printDialog( ): | |
while( True ): | |
fname = str( QFileDialog.getSaveFileName( self, 'Save Screenshot', | |
os.getcwd( ), | |
filter = '*.png' ) ) | |
if fname.lower().endswith('.png') or len( os.path.basename( fname ) ) == 0: | |
break | |
if fname.lower( ).endswith( '.png' ): | |
qpm = QPixmap.grabWidget( self ) | |
qpm.save( fname ) | |
printAction.triggered.connect( printDialog ) | |
self.addAction( printAction ) | |
# | |
self.setFixedWidth( self.sizeHint( ).width( ) ) | |
self.setFixedHeight( 300 ) | |
self.show( ) | |
def processTracking( self ): | |
self.summaryLine.setText( "" ) | |
self.summaryArea.setPlainText( "" ) | |
trackNo = str( self.trackingNumberLine.text( ) ).strip( ) | |
if len(trackNo) == 0: | |
return | |
mainURL = 'http://production.shippingapis.com/ShippingAPI.dll' | |
xmlDoc = """ | |
<TrackRequest USERID="426PERSO4722"> | |
<TrackID ID="%s"></TrackID> | |
</TrackRequest>""" % ''.join( trackNo.split() ) | |
xmlDoc = ''.join( xmlDoc.split('\n')) | |
xmlDoc = ''.join( xmlDoc.split('\t')) | |
params = { 'API' : 'TrackV2', 'XML' : xmlDoc } | |
response = requests.get( mainURL, params = params ) | |
if response.status_code != 200: | |
return | |
tree = ElementTree.fromstring( response.content ) | |
if len(list(tree.iter('TrackDetail'))) != 0: | |
elem = min( tree.iter('TrackDetail') ) | |
self.summaryLine.setText( elem.text.strip( ) ) | |
elem = min( tree.iter( 'TrackSummary' ) ) | |
self.summaryArea.setPlainText( elem.text.strip( ) ) | |
if __name__=='__main__': | |
app = QApplication([]) | |
tp = TracPac( ) | |
result = app.exec_( ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment