Skip to content

Instantly share code, notes, and snippets.

@tanimislam
Last active March 17, 2016 23:19
Show Gist options
  • Save tanimislam/43a9f20b5ffb76fb6366 to your computer and use it in GitHub Desktop.
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.
#!/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