Пример #1
0
def query_bitly(longUrl, user):
    l = urllib.quote(longUrl, '')
    if (longUrl[:7].lower() != 'http://'
            and urllib.unquote(longUrl)[:7].lower() != 'http://'
            and longUrl[:8].lower() != 'https://'
            and urllib.unquote(longUrl)[:8].lower() != 'https://'):
        l = urllib.quote('http://' + longUrl, '')

    result = urlfetch.fetch(JMP_URL + l)
    logging.debug('posted to bit.ly: %s' % l)
    if result.status_code != 200:
        return 'Sorry! Query failed.'
    j = json.JSONDecoder()
    data = j.decode(result.content)
    if data.get('status_code') == 403:
        logging.warning('RATE LIMIT EXCEEDED')
        return 'Sorry! Experiencing rate limits from bit.ly'
    if data.get('status_code') != 200:
        logging.error(result.content)
        return 'Sorry! bit.ly did not accept the query. Make sure that your message only contains a URL.'
    url = Url(longUrl=data.get('data').get('long_url'),
              shortUrl=data.get('data').get('url'),
              creator=user)
    url.put()
    return data.get('data').get('url')
Пример #2
0
 def post(self):
     decoded = simplejson.JSONDecoder().decode(self.request.body)
     mySensor = db.GqlQuery(
         "SELECT __key__ FROM Sensor WHERE name=:1 AND vendor=:2 AND version=:3",
         decoded.get('name'), decoded.get('vendor'),
         decoded.get('version')).get()
     if mySensor == None:
         newSensor = Sensor()
         type = decoded.get('type')
         testsensortype = db.GqlQuery(
             "SELECT __key__ FROM SensorType WHERE type=:1", type).get()
         if testsensortype == None:
             sensortype = SensorType()
             sensortype.type = type
             sensortype.put()
             newSensor.type = sensortype.key().id()
         else:
             newSensor.type = testsensortype.id()
         newSensor.name = decoded.get('name')
         newSensor.vendor = decoded.get('vendor')
         newSensor.version = decoded.get('version')
         newSensor.put()
         self.response.set_status(201)
         self.response.out.write(simplejson.JSONEncoder().encode(
             {"id": newSensor.key().id()}))
     else:
         self.response.set_status(200)
         self.response.out.write(simplejson.JSONEncoder().encode(
             {"id": mySensor.id()}))
Пример #3
0
 def list_competitors(self, campaignid, type):
     #type 0=array for drop down,1=json for drop down,2=all values
     self.blResource = (self.blUrl + self.key + "/campaigns/" +
                        str(campaignid) + "/hotCompetitors")
     self.url = self.blResource
     self.method = "GET"
     response = self.apiCall()
     newdata = simplejson.JSONDecoder().decode(response)
     if type == 0:
         #Array for Drop Down
         choices = []
         choices.append(('0', '(all)'))
         for i in newdata["items"]:
             choices.append((i["url"], i["name"]))
     elif type == 1:
         #JSON
         choices = {}
         choices[0] = "(all)"
         for i in newdata["items"]:
             choices[i["url"]] = i["name"]
     elif type == 2:
         #Array (all values)
         choices = []
         for i in newdata["items"]:
             choices.append((i["id"], i["url"], i["name"]))
     return choices
Пример #4
0
 def __init__(self, verbose_name=None, name=None,
              encoder=DjangoJSONEncoder(), decoder=simplejson.JSONDecoder(),
              **kwargs):
     blank = kwargs.pop('blank', True)
     models.TextField.__init__(self, verbose_name, name, blank=blank,
                               **kwargs)
     self.encoder = encoder
     self.decoder = decoder
Пример #5
0
 def campaign_save(self, id, values):
     self.blResource = (self.blUrl + self.key + "/campaigns/" + str(id))
     self.url = self.blResource
     self.method = "POST"
     self.params = values
     response = self.apiCall()
     newdata = simplejson.JSONDecoder().decode(response)
     return newdata
Пример #6
0
 def list_keywords(self, campaignid, groupid):
     self.blResource = (self.blUrl + self.key + "/campaigns/" +
                        str(campaignid) + "/groups/" + str(groupid))
     self.url = self.blResource
     response = self.apiCall()
     newdata = simplejson.JSONDecoder().decode(response)
     kwlist = newdata["data"]["terms"]
     return kwlist
Пример #7
0
    def get(self):
        tracks = Track.get_all(self.request.get('offset'))

        dec = json.JSONDecoder()
        for t in tracks:
            if t.raw is None:
                continue

            if '-' in t.uuid:
                continue

            data = dec.decode(t.raw)

            dist = 0
            prev_lat = None
            prev_lng = None
            max_diff = 0.0
            nr = 0

            sum_acc = 0

            for p in data['track']:
                if p['acc'] > 30:
                    continue

                sum_acc += p['acc']
                lat = p['lat']
                lng = p['long']
                if prev_lat and prev_lng:
                    lat_diff = math.fabs(lat - prev_lat)
                    lng_diff = math.fabs(lng - prev_lng)
                    diff = math.sqrt((lat_diff * 111111)**2 +
                                     (lng_diff * 75500)**2)
                    if diff > max_diff:
                        max_diff = diff

                    nr += 1
                    dist += diff

                prev_lat = lat
                prev_lng = lng

            if not nr:
                continue

            avg_acc = sum_acc / float(nr)
            avg_dist = float(dist) / float(nr)

            t.avg_dist = avg_dist
            t.avg_acc = float(avg_acc)
            t.nr = nr
            t.put()

            if max_diff > 200:
                self.response.out.write(
                    "[%d] Track distance: %d nr: %d - our distance: %d - max diff: %f - avg acc: %f - avg dist: %f\n"
                    % (t.key().id(), data['distance'], nr, dist, max_diff,
                       avg_acc, avg_dist))
Пример #8
0
def encode_json(obj):
    """ also encode Django objects to Json, preferebly by id-name""" 
    if isinstance(obj, Medium):
        return "%s - %s" % (obj.id, obj.name)
    if isinstance(obj, table3.Table):
        return simplejson.JSONDecoder().decode(TableToJson().run(obj)) # TODO: this is very ugly and inefficient.. (double encoding..)
    if isinstance(obj, datetime.datetime):
        return obj.strftime('%Y-%m-%d %H:%M')
    raise TypeError("%r is not JSON serializable" % (obj,))
Пример #9
0
    def post(self, id=None):
        decoded = simplejson.JSONDecoder().decode(self.request.body)

        #Create a new device and save it
        device = Device()
        device.sensors = decoded.get('sensors')
        device.put()
        self.response.set_status(201)
        self.response.out.write(Utils.GqlEncoder().encode({"id":
                                                           device.key()}))
Пример #10
0
 def load_events(self, obj, path):
     """
     Load events from JSON file
     """
     # Decode JSON
     with open(path) as f:
         try:
             data = simplejson.JSONDecoder().decode(f.read())
         except ValueError, why:
             raise CommandError("Failed to decode JSON file \"%s\": %s" %
                                (path, why))
Пример #11
0
    def post(self):
        decoded = simplejson.JSONDecoder().decode(self.request.body)

        data = Data()
        data.test_id = decoded.get('test_id')
        data.device_id = decoded.get('device_id')
        data.content = decoded.get('content')
        data.put()

        self.response.set_status(201)
        self.response.out.write(simplejson.JSONEncoder().encode(
            {"id": data.key().id()}))
Пример #12
0
def log_action(request, game_name):
    play = get_object_or_404(SavedPlay, pk=request.session['current_play_id_for_%s' % game_name])
    
    log = request.POST.get('log','')
    for line in StringIO(log.encode('utf-8')):
        ev = simplejson.JSONDecoder().decode(line)
        entry = LogEntry(savedplay=play, type=ev['type'],
                         ms=ev['time'], order=ev['order'], _data='')
        entry.data = ev['data']
        entry.save()
    
    return json_to_response({'status':200})
Пример #13
0
def set_score(request, game_name):
    play = get_object_or_404(SavedPlay, pk=request.session['current_play_id_for_%s' % game_name])
    if request.user.is_authenticated():
        user = get_object_or_404(Profile, username=request.user.profile.username)
        state = simplejson.JSONDecoder().decode(user.current_state)
        state[game_name] = request.GET.getlist('state')
        user.current_state = simplejson.dumps(state)
        user.save()
    if play.score < int(request.GET['score']):
        play.score = request.GET['score']
        play.save()
    return json_to_response({'status':200})
Пример #14
0
def shorten(url):
    gurl = 'http://goo.gl/api/url?url=%s' % urllib.unquote(url)
    req = Request(gurl, data='')
    req.add_header('User-Agent', 'toolbar')
    logging.info('Shortening ' + gurl)
    try:
        res = urlopen(req)
        results = json.load(res)
        logging.info(res.code)
    except HTTPError, e:  #triggers on HTTP code 201
        logging.info(e.code)
        error_content = e.read()
        results = json.JSONDecoder().decode(error_content)
Пример #15
0
 def deserialize(self, string):
     params_dict = urlparse.parse_qs(string)
     params = dict(params_dict)
     parameters = params.get('params')
     if (parameters == None):
         parameters = []
     json_obj = {
         "method": str(params.get('method')[0]),
         "params": parameters,
         "id": 1
     }
     return json.JSONDecoder().decode(
         AugmentedJSONEncoder().encode(json_obj))
Пример #16
0
    def list_campaigns(self, all, array):
        self.blResource = (self.blUrl + self.key + "/campaigns")
        self.url = self.blResource
        response = self.apiCall()

        if array == True:
            newdata = simplejson.JSONDecoder().decode(response)
            choices = []
            if all == True:
                for i in newdata["items"]:
                    choices.append((i["id"], i["name"]))
            else:
                for i in newdata["items"]:
                    if i["isActive"] == True:
                        choices.append((i["id"], i["name"]))
            return choices
        else:
            return response
Пример #17
0
 def __init__(self, request, response):
     self.request = request
     self.status = None
     if hasattr(response, 'code'):
         self.status = response.code
         self.json = None
         self.data = None
         if response:
             self.data = response.read()
             if response.code in [200]:
                 #log('request', 'debug', 'got api response: ' +self.data)
                 decoder = simplejson.JSONDecoder()
                 if self.data.startswith('{id:'):
                     self.data = self.data.replace('id', '"id"')
                 if self.data:
                     try:
                         if request.getType().lower() == 'delete':
                             self.json = {}
                         else:
                             self.json = decoder.decode(self.data)
                     except ValueError:
                         try:
                             keys = [
                                 u'\xef', u'\xa0', u'\xa1', u'\xa2',
                                 u'\xa3', u'\xa4', u'\xa5', u'\xa6',
                                 u'\xa7', u'\xa8', u'\xa9', u'\xaa',
                                 u'\xab', u'\xac', u'\xad', u'\xae',
                                 u'\xaf', u'\xb0', u'\xb1', u'\xb2',
                                 u'\xb3', u'\xb4', u'\xb5', u'\xb6',
                                 u'\xb7', u'\xb8', u'\xb9', u'\xba',
                                 u'\xbb', u'\xbc', u'\xbd', u'\xbe',
                                 u'\xbf', u'\xef'
                             ]
                             ucontent = unicode(self.data, 'latin-1')
                             for key in keys:
                                 ucontent = ucontent.replace(key, u'')
                             self.data = ucontent.encode('utf-8')
                             self.json = decoder.decode(self.data)
                         except ValueError:
                             raise APIParseError(
                                 'unable to parse json: %s' % self.data)
                 else:
                     self.json = {}
Пример #18
0
    def __init__(self, verbose_name=None, name=None,
                 encoder=DjangoJSONEncoder(), decoder=simplejson.JSONDecoder(),
                 datatype=dict,
                 **kwargs):
        """
        Create a new JSONField

        :param verbose_name:   The verbose name of the field
        :param name:    The short name of the field.
        :param encoder:   The encoder used to turn native datatypes into JSON.
        :param decoder:   The decoder used to turn JSON into native datatypes.
        :param datatype:  The native datatype to store.
        :param kwargs:    Other arguments to pass to parent constructor.
        """
        blank = kwargs.pop('blank', True)
        models.TextField.__init__(self, verbose_name, name, blank=blank,
                                  **kwargs)
        self.encoder = encoder
        self.decoder = decoder
        self.datatype = datatype
Пример #19
0
    def list_keyword_groups(self, campaignid, type):
        self.blResource = (self.blUrl + self.key + "/campaigns/" +
                           str(campaignid) + "/groups")
        self.url = self.blResource
        response = self.apiCall()
        newdata = simplejson.JSONDecoder().decode(response)
        if type == 0:
            choices = []
            choices.append(('0', '(all)'))
            for i in newdata["items"]:
                choices.append((str(i["id"]) + "|" + i["name"], i["name"]))
        elif type == 1:
            choices = {}
            choices[0] = "(all)"
            for i in newdata["items"]:
                choices[str(i["id"]) + "|" + i["name"]] = i["name"]
        elif type == 2:
            choices = []
            for i in newdata["items"]:
                choices.append((i["id"], i["name"], i["numTerms"]))

        return choices
Пример #20
0
    def post(self):
        try:
            decoder = json.JSONDecoder()
            trk = self.request.get('track')
            if not trk:
                raise Err("no track found")

            data = decoder.decode(trk)
            uploadtime = datetime.datetime.now()

            distance = int(data['distance'])
            track = Track(uuid=data['uuid'],
                          uploadtime=uploadtime,
                          distance=distance)

            counter = Counter.get_by_key_name('distance')
            if not counter:
                counter = Counter(key_name='distance', value=24000)
            counter.value += distance
            counter.put()

            number = Counter.get_by_key_name('number')
            if not number:
                number = Counter(key_name='number', value=130)
            number.value += 1
            number.put()

            track.raw = trk
            track.put()

            #            for p in data['track']:
            #                point = Point(parent=track, lat=p['lat'], lng=p['long'], acc=p['acc'], ts=datetime.datetime.fromtimestamp(p['ts']))
            #                point.put()

            self.response.out.write('{"success":true}')
        except Err, e:
            self.response.out.write('{"success":false, "error":"%s"}' %
                                    e.message)
Пример #21
0
    def getReport(self, campaignId, report, format, values):
        self.method = "POST"
        self.blResource = (self.blUrl + self.key + "/reports/" + campaignId +
                           "/" + report + "/" + format)
        self.url = self.blResource
        self.params = values
        response = self.apiCall()

        if format == "json":
            newdata = simplejson.JSONDecoder().decode(response)
            self.values = []
            for i in newdata["rows"]:
                #for i in range(1, 7):
                #print i["advertiser_url"]
                for j in specs['brandlock'][report]:
                    self.values.append(i[j[1]])
                    #print i[j[1]]

            #print values
            self.specSize = len(specs['brandlock'][report])

            return self.getReportHTML(report)
        else:
            return response
Пример #22
0
def getApiResponse(api_req):
    ''' Makes the API request and returns the response. The response is an APIResponse object.
        Raises APIError on error conditions. The error conditions and the error raised are -
        - APIParseError : Error parsing response. When response is not valid JSON with HTTP 200
        - APIBadReqError   : Error if request is malformed
        - APIUnauthorizedError  : API returned 403
        - APIUnauthenticatedError : API returned 401
        - APIServerError : API returned 5xx
    '''
    res = None
    try:
        data = None
        url = api_req.getUrl()
        req = None
        if api_req.getData():
            data = api_req.getData()
            headers = {'Content-Type': 'application/json; charset=UTF-8'}
            req = urllib2.Request(url, data, headers)
            #logging.getLogger('pl').info(url)
            #logging.getLogger('pl').info(data)
        else:
            if api_req.type.lower() == 'delete':
                req = RequestWithMethod(url, data, api_req.getType())
            else:
                req = urllib2.Request(url, data)
        #logging.getLogger('pl').info('testing')
        #log('request','info','making api request - %s' % repr(api_req))
        res = urllib2.urlopen(req)
    except IOError, e:
        logging.getLogger('pl').exception('error making api request')
        if hasattr(e, 'reason'):
            # unknown error, log it
            log('error', 'exception',
                'error conversing with api %s %s' % (repr(api_req), repr(e)))
            raise APIError(e.reason)
        if hasattr(e, 'code'):
            # log all errors
            log(
                'error', 'exception', 'http error conversing with api %s %s' %
                (repr(api_req), repr(e)))
            expected_error_codes = [
                400, 401, 403, 404, 500, 501, 502, 503, 504, 505
            ]
            if e.code not in expected_error_codes:
                raise APIError('invalid response from server')
            else:
                if e.code == 400:
                    badRequest = APIBadReqError('bad request : %s' %
                                                repr(api_req))
                    resp = e.read()
                    log('error', 'error', 'Bad request in API usage %s' % resp)
                    decoder = simplejson.JSONDecoder()
                    resJson = decoder.decode(resp)
                    badRequest.json = resJson
                    raise badRequest
                if e.code == 401:
                    raise APIUnauthenticatedError('not authenticated : %s' %
                                                  repr(api_req))
                if e.code == 403:
                    raise APIUnauthorizedError('not authorized : %s' %
                                               repr(api_req))
                if e.code == 404:
                    raise APINotFoundError('resource not found : %s' %
                                           repr(api_req))
                # server error
                raise APIServerError('server error during api req : %s' %
                                     repr(api_req))
Пример #23
0
    def decode(self, obj):
        super(JSONDecoder, self).decode(obj)
        import django.utils.simplejson as json

        return json.JSONDecoder().decode(obj)
Пример #24
0
 def campaign_info(self, id):
     self.blResource = (self.blUrl + self.key + "/campaigns/" + str(id))
     self.url = self.blResource
     response = self.apiCall()
     newdata = simplejson.JSONDecoder().decode(response)
     return newdata
Пример #25
0
    def get(self):
        dump_tracks = False
        if self.request.get('ids'):
            tracks = Track.get_by_id(
                [int(id) for id in self.request.get('ids').split(',')])
        elif self.request.get('cursor'):
            tracks = Track.all()
            tracks.filter("ok =", True)

            if self.request.get('cursor') != 'start':
                tracks.with_cursor(memcache.get('cursor'))

            ttt = tracks.fetch(limit=20)
            logging.info("New cursor: " + tracks.cursor())
            memcache.set('cursor', tracks.cursor())
            tracks = ttt
        else:
            """offset=123"""
            tracks = Track.all()
            tracks.filter("nr >", 40)
            if self.request.get('limit'):
                limit = int(self.request.get('limit'))
                dump_tracks = True
            else:
                limit = 100

            offset = int(self.request.get('offset'))
            ttt = tracks.fetch(limit=limit, offset=offset)
            logging.info("New cursor: " + tracks.cursor())
            tracks = ttt

        count = 0
        dec = json.JSONDecoder()
        for t in tracks:
            if t.raw is None:
                logging.critical("Track illegal %d" % t.key().id())
                continue

            if not t.max_diff:
                logging.critical("max diff not found [%d]" % t.key().id())
                continue

#            if not t.avg_dist or not t.avg_acc:
#                continue
#
            if '-' in t.uuid:
                logging.critical("Uid illegal %d" % t.key().id())
                continue


#            if len(t.uuid) == 40:
#                type = 'iphone'
#            elif len(t.uuid) < 20 and len(t.uuid) > 0:
#                type = 'android'
#            else:
#                logging.critical('ehj')

            self.response.out.write(
                "<Placemark><ExtendedData>" +
                "<Data name=\"avg_acc\"><displayName>avg_acc</displayName><value>%f</value></Data>"
                % t.avg_acc +
                "<Data name=\"avg_dist\"><displayName>avg_dist</displayName><value>%f</value></Data>"
                % t.avg_dist +
                "<Data name=\"max_diff\"><displayName>max_diff</displayName><value>%d</value></Data>"
                % t.max_diff + "</ExtendedData><LineString><coordinates>")

            count += 1
            if dump_tracks:
                if t.avg_dist > 100 or t.max_diff > 100 or t.avg_acc > 50:
                    logging.debug(
                        "Track [%d] - avg_dist=%f, max_diff=%d, avg_acc=%f" %
                        (t.key().id(), t.avg_dist, t.max_diff, t.avg_acc))

            data = dec.decode(t.raw)
            for p in data['track']:
                self.response.out.write("%f,%f\n" % (p['long'], p['lat']))

            self.response.out.write(
                "</coordinates></LineString></Placemark>\n")

        logging.info("processed %d tracks" % count)