#!/usr/bin/python
""" checkrank.py: 
    Script to fetch rank of a domain in Yahoo's
    search results for given search query keywords.
    
    Uses Yahoo API with my APPID 'NewsInImages' which
    I registered for a (now vaporware) idea. I encourage
    you to get your own APPID if you plan to use this script
    more than twice :)
    
    http://developer.yahoo.net/search/index.html
    
Usage: "./checkrank.py somedomain.com some query terms"
   
Requires: xmltramp.py from http://www.aaronsw.com/2002/xmltramp/

Author :   Deepak Sarda
           firstname.lastname@gmail.com
"""

__author__      = 'Deepak Sarda'
__version__     = '1.0'
__copyright__   = '(c) 2005 Deepak Sarda'
__license__     = 'Public Domain'
__url__         = 'http://www.antrix.net/'

import urllib, sys
import xmltramp

def getRank(DOMAIN, QUERY, max_results = 200, per_query = 20):

    APPID = 'NewsInImages'
    query_base_url = 'http://api.search.yahoo.com/WebSearchService/V1/webSearch?%s'

    start_position = 1
    while (start_position + per_query - 1) < max_results:

        params = urllib.urlencode({'appid': APPID, 'query': QUERY, 'results': per_query, 'start': start_position})

        xmlDataObj = urllib.urlopen(query_base_url % params)
        Results = xmltramp.seed(xmlDataObj)
        xmlDataObj.close()

        max_results = min(max_results, int(Results('totalResultsAvailable')))

        start_position = int(Results('firstResultPosition')) + int(Results('totalResultsReturned'))

        current_position = int(Results('firstResultPosition'))

        for result in Results:
            if str(result.Url).find(DOMAIN) != -1:
                print "Rank of %s is %d for query term: %s" % (DOMAIN, current_position, QUERY)
                print "Title:", result.Title
                print "URL:", result.Url
                return result

            current_position += 1

    print "%s not found in the first %d results" % (DOMAIN, max_results)


if __name__ == '__main__':

    #DOMAIN = 'antrix.net'
    #QUERY = 'thinkpad'

    if len(sys.argv) < 3:
        print "Usage: %s somedomain.com some query terms" % (sys.argv[0])
        raise SystemExit

    domain = sys.argv[1]
    query = " ".join(sys.argv[2:])

    getRank(domain, query)