Ejemplo n.º 1
0
def vote(request):
    """pobierz losowe fotki do glosowania (tylko jeszcze nie glosowane)"""

    if request.method == 'POST':
        """glosuj"""

        redis = R()

        if request.POST.get('media_id') == None:
            logging.info('no media id')
            return HttpResponse('Error')

        try:
            media_id = request.POST['media_id']
        except ValueError:
            logging.error('%s is not valid instagram_id' % request.POST.get('media_id'))
            redis.add_photo(request.POST.get('media_id'))
            return HttpResponse('invalid instagram id')

        if request.POST.get('type') == 'like':
            rest_request('/api/instagram/',
                         {'type': 'like', 'media_id': media_id, 'user': request.user.name, 'token': request.user.token})
        elif request.POST.get('type') == 'unlike':
            rest_request('/api/instagram/', {'type': 'unlike', 'media_id': media_id, 'user': request.user.name,
                                             'token': request.user.token})
        else:
            logging.info('unregocognized type=%s' % request.GET.get('type'))

        return HttpResponse('ok')

    photos = Photo.objects.get_more_photos(request.user)

    return HttpResponse(json.dumps({
        'photos': photos
    }))
Ejemplo n.º 2
0
def photos(request):
    """lista fotek w biezacym temacie"""

    if request.method == 'POST':
        """operacje na moich zdjeciach"""

        if request.GET.get('media_id') == None:
            logging.info('no media id')
            return HttpResponse('Error')

        try:
            media_id = request.GET.get('media_id')
        except ValueError:
            logging.error('%s is not valid instagram_id' % request.GET.get('media_id'))
            return

        if request.GET.get('type') == 'activate':
            p = Photo.objects.get_by_instagram_id(media_id)
            if p is not None:
                p.is_active = True
                p.is_user_active = True
                p.put()
            # logging.info('activated %s' % media_id)
            else:
                rest_request('/api/instagram/',
                             {'type': 'add_instadaily_tag', 'media_id': media_id, 'user': request.user.name,
                              'token': request.user.token})

        elif request.GET.get('type') == 'deactivate':
            p = Photo.objects.get_by_instagram_id(media_id)
            if p is not None:
                p.is_user_active = False
                p.put()
            # logging.info('deactivated %s' % media_id)
            else:
                logging.warning('cannot deactivate unavailable photo')

        else:
            logging.info('unregocognized type=%s' % request.GET.get('type'))

        return HttpResponse('ok')

    subject = Subject.objects.get_current()

    photos = Photo.objects.filter(user=request.user.name, subject=subject, is_active=True).order_by('date_instagram')

    blocked = []
    fetched_ids = []
    ps = {'active': [], 'inactive': []}
    for p in photos:
        fetched_ids.append(p.instagram_id)

        if p.is_blocked:
            continue
        if p.is_active and p.is_user_active:
            ps['active'].append(p.to_dict())
        else:
            ps['inactive'].append(p.to_dict())

    # get latest photos from instagram
    url = 'https://api.instagram.com/v1/users/%s/media/recent/?access_token=%s&min_timestamp=%s&max_timestamp=%s' % (
    request.user.instagram_id, request.user.access_token, int(time.mktime(subject.active_from.utctimetuple())),
    int(time.mktime(subject.active_to.utctimetuple())))

    try:
        data = json.loads(fetch_url(url))
    except Exception, e:
        return HttpResponse(json.dumps({
            'photos': ps
        }))
Ejemplo n.º 3
0
def APICallWorker(request):
    if request.method == 'GET': return HttpResponse('Method not supported')

    # --- Validation
    req = decode_request(request)
    if req is None:
        logging.warning('unauthorized query - ignoring')
        return HttpResponse('ignored')

    if request.POST.get('type') == None:
        logging.warning('added task without required params - ignoring')
        return HttpResponse('ignored')

    # --- Methods
    url = 'https://api.instagram.com/v1'
    method = 'GET'
    params = {}

    if request.POST.get('type') == 'like':
        method = 'POST'
        params = {'access_token': req['user'].access_token}
        url += '/media/%s/likes/' % request.POST.get('media_id')

    elif request.POST.get('type') == 'unlike':
        method = 'DELETE'
        url += '/media/%s/likes/' % request.POST.get('media_id')
        url += '?access_token=' + req['user'].access_token

    elif request.POST.get('type') == 'add_instadaily_tag':
        method = 'POST'
        params = 'access_token=%s&text=%s' % (req['user'].access_token, INSTADAILY_TAG_MSG)
        url += '/media/%s/comments' % request.POST.get('media_id')

    elif request.POST.get('type') == 'user' and request.POST.has_key('user_id'):
        url += '/users/%s' % request.POST.get('user_id')
        url += '?access_token=' + req['user'].access_token

    result = rest_request(url, params, method)

    if request.POST.get('type') == 'like':
        p = Photo.objects.get_by_instagram_id(request.POST.get('media_id'))
        p.likes += 1
        p.save()

        req['user'].vote_like += 1
        req['user'].save()

    elif request.POST.get('type') == 'user' and request.POST.get('user_id') is not None:
        try:
            data = json.loads(result)['data']
        except json.JSONDecodeError:
            print 'failed to decode json %s' % result
            print url
            return HttpResponse('')
        except KeyError:
            logging.error('DATA not found in recent photos for user %s' % request.POST.get('user_id'))
            return HttpResponse('')

        try:
            user = User.objects.filter(instagram_id=data['id']).get()
            user.pic = data['profile_picture']
            user.full_name = data['full_name']
            user.save()

        except User.DoesNotExist:
            user = User()
            user.name = data['username']
            user.instagram_id = data['id']
            user.full_name = data['full_name']
            user.pic = data['profile_picture']
            user.photos = 0
            user.vote_like = 0
            user.vote_dislike = 0
            try:
                user.last_subject_id = Subject.objects.get_current().id
            except AttributeError:
                logging.error('cannot find current subject!!!')
                user.last_subject_id = 0
            user.last_subject_points = 0
            user.save()

    else:
        try:
            j = json.loads(result)
        except json.JSONDecodeError:
            print 'failed to decode json %s' % result
            print url
            return HttpResponse('')

        # only disliking photos that wasn't previously liked
        if j.has_key('meta') and j['meta'].has_key('error_message') and j['meta'][
            'error_message'] == 'the user has not liked this media':
            p = Photo.objects.get_by_instagram_id(request.POST.get('media_id'))
            p.dislikes += 1
            p.save()

            req['user'].vote_dislike += 1
            req['user'].save()

            return HttpResponse('')

        # logging.warning('API call failed with %s' % result)

    return HttpResponse('')