Example #1
0
def process_rss_feed(request, link_id_encoded, website_encode_id):
    from atrinsic.base.models import Link, Website
    from atrinsic.web.helpers import base36_decode
    from elementtree.ElementTree import XML, tostring
    import urllib2
    link = Link.objects.get(pk=base36_decode(link_id_encoded))
    website = Website.objects.get(pk=base36_decode(website_encode_id))
    tracking_url = link.track_html_ape(website, link_only=True)
    try:
        raw_response = urllib2.urlopen(link.link_content)
    except:
        return AQ_render_to_response(request,
                                     'base/custom_error.html', {
                                         'errmsg': RSS_TIMEOUT,
                                     },
                                     context_instance=RequestContext(request))

    tree = XML(raw_response.read())
    for node in tree.getiterator('link'):
        domain_position = node.text.find(".com") + 4
        node.text = tracking_url + "&url=" + node.text[domain_position:]

    return render_to_response("blank_xml_template.html",
                              {"XML": tostring(tree)},
                              mimetype="application/xhtml+xml")
Example #2
0
def process_rss_feed(request,link_id_encoded,website_encode_id):
    from atrinsic.base.models import Link,Website
    from atrinsic.web.helpers import base36_decode
    from elementtree.ElementTree import XML,tostring
    import urllib2
    link = Link.objects.get(pk=base36_decode(link_id_encoded))
    website = Website.objects.get(pk=base36_decode(website_encode_id))
    tracking_url = link.track_html_ape(website,link_only=True)
    try:
        raw_response = urllib2.urlopen(link.link_content)
    except:
        return AQ_render_to_response(request, 'base/custom_error.html', {
                'errmsg' : RSS_TIMEOUT,
            }, context_instance=RequestContext(request))

    tree = XML(raw_response.read())
    for node in tree.getiterator('link'):
        domain_position = node.text.find(".com") + 4
        node.text = tracking_url + "&url=" + node.text[domain_position:]
    
    return render_to_response("blank_xml_template.html", {"XML":tostring(tree)}, mimetype="application/xhtml+xml")
Example #3
0
class AqAnalytics(object):
    def __init__(self,user_name,password):
        self.SOURCE_APP_NAME = 'Atrinsic-Network'
        self.my_client = gdata.analytics.client.AnalyticsClient(source=self.SOURCE_APP_NAME)
        self.account_feed = ''
        self.data_feed = ''
        self.table_ids = None
        self.user_name = user_name
        self.password = password

    def authenticate(self):
        try:
            self.my_client.client_login(self.user_name, self.password,self.SOURCE_APP_NAME,'analytics')
        except gdata.client.BadAuthentication:
            raise Exception('Invalid user credentials given.')
        except gdata.client.Error:
            raise Exception('Invalid user credentials given.')
        return True
        
    def AccountFeedQuery(self,max_results='50'):
        # DataFeedQuery simplifies constructing API queries and uri encodes params.
        self.account_feed_query = AccountFeedQuery({'max-results': max_results})
        self.account_feed = self.my_client.GetDataFeed(self.account_feed_query)
        self.parsed_account_feed = XML(str(self.account_feed))
        return self.parsed_account_feed
        
    def GetSiteList(self,feed_query = None):
        if feed_query == None:
            feed_query = self.AccountFeedQuery()
        complete_feed = []
        feed_details = {}
        for elem in feed_query:
            if list(elem):
                for node in elem:
                    NS1='{http://schemas.google.com/analytics/2009}'
                    NS2='{http://www.w3.org/2005/Atom}'
                    if node.tag[len(NS1):] == "tableId":
                        feed_details['table_id']=node.text
                    elif node.tag[len(NS2):] == "title":
                        feed_details['site_url']=node.text
                if feed_details:
                    complete_feed.append(feed_details)
                feed_details = {}
            
        return complete_feed
    def DataFeedQuery(self,start_date,end_date,table_id,report_type,parse_as="flat",sort='',filters='',max_results='50',chart_type="table"):
        m_indx = report_type.index("m-")
        d_indx = report_type.index("d-")
        dimensions = report_type[d_indx+2:m_indx-1]
        for d in dimensions.split(","):
            d = "ga:" + d +","
        dim = d[:-1]
        metrics = report_type[m_indx+2:]
        for m in metrics.split(","):
            m = "ga:" + m +","
        metr = m[:-1]
        #try:            
        print "TEST3"
        if max_results == '':
            max_results = 50
        self.data_feed_query = gdata.analytics.client.DataFeedQuery({
            'ids': table_id,
            'start-date': start_date,
            'end-date': end_date,
            'dimensions':dim,
            'metrics':metr,
            'sort': sort,
            'filters': filters,
            'max-results': max_results})
        print self.data_feed_query
        self.data_feed = self.my_client.GetDataFeed(self.data_feed_query)
        self.parsed_data_feed = XML(str(self.data_feed))
        print self.parsed_data_feed
        if parse_as == "raw":
            return self.parsed_data_feed,len(self.parsed_data_feed.getiterator('{http://www.w3.org/2005/Atom}entry')),True
        else:
            return self.ParseDataFeedResults(self.parsed_data_feed,parse_as),len(self.parsed_data_feed.getiterator('{http://www.w3.org/2005/Atom}entry')),True
        """except:
            'body', 'headers', 'message', 'reason', 'status'
            error = sys.exc_info()[1]
            error_xml = XML(error.message[error.message.index("<"):])
            error_list = []
            for node in error_xml.getiterator("{http://schemas.google.com/g/2005}error"):
                for err in node.getchildren():
                    if err.tag == "{http://schemas.google.com/g/2005}internalReason":
                        error_list.append(err.text)
            return (False,False,error_list)"""
            
    def ParseDataFeedResults(self,data_feed_query,parse_as):
        NS = '{http://schemas.google.com/analytics/2009}'
        e_list = []
        headers = []
        self.parse_as = parse_as
        for elem in data_feed_query.getiterator('{http://www.w3.org/2005/Atom}entry'):
            if parse_as == "dict":
                e_dict = {}
            elif parse_as == "array" or parse_as == "flat":
                e_dict = []
            else:
                e_dict = ""
            for node in elem.getchildren():
                e_dict,headers = self.SuperAppend(node,e_dict,headers)
                
            if parse_as == "flat":
                for x in e_dict:
                    e_list.append(x)
            else:
                e_list.append(e_dict)
        return e_list,headers
        
    def SuperAppend(self,node,e_dict,headers):
        if node.attrib.has_key('value'):
            try:
                headers.index(node.attrib['name'][3:])
            except:
                headers.append(node.attrib['name'][3:])
            if self.parse_as == "dict":
                e_dict[node.attrib['name'][3:]] = node.attrib['value']
            elif self.parse_as == "array" or self.parse_as == "flat":
                e_dict.append(node.attrib['value'])
            else:
                e_dict = node.attrib['value']
        return e_dict,headers
        if (verbose == 1):
            print "Response from eve-central:"
            print contents
            print "END RESPONSE"

        if (contents[0:5] == "<?xml"):
            # Parse the XML response from EVE-Central
            # See usage here for ElementTree:  http://effbot.org/zone/element-index.htm
            tree = XML(contents)  # From a string
            if (verbose == 1):
                print "XML received from eve-central:"
                print tree
            #print "XML Element count = ", len(tree)

            # the tree root is the toplevel html element
            tree_map = dict((c, p) for p in tree.getiterator() for c in p)
            root = tree

            for c in root.getchildren():
                if (verbose == 1):
                    print c.tag
                for d in c.getchildren():
                    if (verbose == 1):
                        print "    ", d.tag
                    for e in d.getchildren():
                        if (verbose == 1):
                            print "        ", e.tag
                        for f in e.getchildren():
                            if (verbose == 1):
                                print "            ", f.tag, " = ", f.text
                            if ((e.tag == "sell") and (f.tag == "avg")):
        if (verbose == 1):
            print "Response from eve-central:"
            print contents
            print "END RESPONSE"
        
        if (contents[0:5] == "<?xml"):
            # Parse the XML response from EVE-Central
            # See usage here for ElementTree:  http://effbot.org/zone/element-index.htm
            tree = XML(contents)        # From a string
            if (verbose == 1):
                print "XML received from eve-central:"
                print tree
            #print "XML Element count = ", len(tree)

            # the tree root is the toplevel html element
            tree_map = dict((c, p) for p in tree.getiterator() for c in p)
            root = tree

            for c in root.getchildren():
                if (verbose == 1):
                    print c.tag
                for d in c.getchildren():
                    if (verbose == 1):
                        print "    ", d.tag
                    for e in d.getchildren():
                        if (verbose == 1):
                            print "        ", e.tag
                        for f in e.getchildren():
                            if (verbose == 1):
                                print "            ", f.tag, " = ", f.text
                            if ((e.tag == "sell") and (f.tag == "avg")):