| 
549
 | 
     1 #!/usr/bin/env python
 | 
| 
 | 
     2 
 | 
| 
 | 
     3 """
 | 
| 
 | 
     4 compare differences of url contents
 | 
| 
 | 
     5 """
 | 
| 
 | 
     6 
 | 
| 
 | 
     7 import difflib
 | 
| 
 | 
     8 import optparse
 | 
| 
 | 
     9 import os
 | 
| 
 | 
    10 import sys
 | 
| 
 | 
    11 import urllib2
 | 
| 
 | 
    12 
 | 
| 
 | 
    13 here = os.path.dirname(os.path.realpath(__file__))
 | 
| 
 | 
    14 
 | 
| 
 | 
    15 def main(args=sys.argv[1:]):
 | 
| 
 | 
    16 
 | 
| 
 | 
    17     usage = '%prog [options] from-url to-url'
 | 
| 
 | 
    18     parser = optparse.OptionParser(usage=usage, description=__doc__)
 | 
| 
 | 
    19     parser.add_option('--bash', '--command', dest='command',
 | 
| 
 | 
    20                       action='store_true', default=False,
 | 
| 
 | 
    21                       help="prepend output with bash command")
 | 
| 
 | 
    22     options, args = parser.parse_args(args)
 | 
| 
 | 
    23     if len(args) != 2:
 | 
| 
 | 
    24         parser.print_usage()
 | 
| 
 | 
    25         parser.exit(1)
 | 
| 
 | 
    26 
 | 
| 
 | 
    27     contents = {}
 | 
| 
 | 
    28     for url in args:
 | 
| 
 | 
    29         contents[url] = urllib2.urlopen(url).read()
 | 
| 
 | 
    30 
 | 
| 
 | 
    31     diff = difflib.unified_diff(contents[args[0]],
 | 
| 
 | 
    32                                 contents[args[1]],
 | 
| 
 | 
    33                                 fromfile=args[0],
 | 
| 
 | 
    34                                 tofile=args[1],
 | 
| 
 | 
    35                                 lineterm='')
 | 
| 
 | 
    36 
 | 
| 
 | 
    37     # output
 | 
| 
 | 
    38     if options.command:
 | 
| 
 | 
    39 
 | 
| 
 | 
    40         template = """%(PS1)s diff <(curl --location %(fromfile)s 2> /dev/null) <(curl --location %(tofile)s 2> /dev/null)"""
 | 
| 
 | 
    41         print template % dict(PS1='#',
 | 
| 
 | 
    42                               fromfile=args[0],
 | 
| 
 | 
    43                               tofile=args[1])
 | 
| 
 | 
    44 
 | 
| 
 | 
    45     print '\n'.join(list(diff))
 | 
| 
 | 
    46 
 | 
| 
 | 
    47 if __name__ == '__main__':
 | 
| 
 | 
    48     main()
 |