Example #1
0
 def test_auth(self):
     #Use refresh token to get new access token
     profile = Profile.objects.get(pk=1)
     args = {
               'client_id': settings.RENREN_APP_API_KEY,
               'client_secret': settings.RENREN_APP_SECRET_KEY,
               'refresh_token' : profile.renren_refresh_token, 
               'grant_type' : 'refresh_token',
             }
     response = urllib.urlopen(RENREN_ACCESS_TOKEN_URI + "?" + urllib.urlencode(args)).read()
     parsed = json.loads(response)
     access_token = parsed["access_token"]
     refresh_token = parsed['refresh_token']
     
     #use access token to get new session key
     session_key_request_args = dict(oauth_token=access_token)
     response = urllib.urlopen(RENREN_SESSION_KEY_URI + "?" + urllib.urlencode(session_key_request_args)).read()
     session_key = json.loads(response)["renren_token"]["session_key"]
     
     #Store the updated data
     profile.renren_refresh_token = refresh_token
     if profile.renren_access_token != access_token:
         print 'access token changed!'
     profile.renren_access_token = access_token
     profile.save()
     
     
     client = RenRenAPIClient(access_token, None, settings.RENREN_APP_API_KEY, settings.RENREN_APP_SECRET_KEY)
     
     #get user info with session key
     params = dict(method="users.getInfo", fields="uid,name,tinyurl,headurl")
     rruser = client.request(params)
     user_info = parse_json(rruser)[0]
     print user_info['tinyurl']
     self.stdout.write('Finished authorization\n')
     
     from main.utils import generate_random_file_name
     gift = Wishlist_Gift.objects.get(taobao_id=13668834356)
     buyers = Wishlist_User.objects.filter(pk__gt=10)
     buyers_str = ','.join([b.renren_name.encode('utf-8') for b in buyers])
     buyers_renren_id = [b.renren_account for b in buyers]
     caption = '我向' + buyers_str + '许下了心愿:' + gift.title.encode('utf-8') + '。来许愿板帮我实现吧:) ' + 'give'
     params = dict(method="photos.upload", caption=caption)
     temp_name = generate_random_file_name(32)
     temp_file_addr = settings.MEDIA_ROOT + 'apps/wishlist/' + temp_name
     temp_file = open(temp_file_addr, 'wb')
     temp_file.write(urllib2.urlopen(gift.pic_url).read())
     temp_file.close()
     headers,postdata = client.pack_image(temp_file_addr, params, caption)
     conn = httplib.HTTPConnection('api.renren.com')
     conn.request('POST', 'http://api.renren.com/restserver.do', headers=headers, body=postdata)
     resp = conn.getresponse()
     
     p_info = parse_json(resp.read())
     try:
         img = Image.open(temp_file_addr)
         width, height = img.size
         #At most three friends can be wished for, so this is more than enough
         pos = ((130,150), (130,470), (260,310), (390,150), (390,470))
         nf = len(buyers_renren_id)
         pid = p_info['pid']
         uid = p_info['uid']
         for i in range(nf): 
             params = dict(method="photos.tag",photo_id=pid,owner_id=uid,frame_width=80,frame_height=80)
             params["photo_width"] = width
             params["photo_height"] = height
             params["top"] = pos[i][0]
             params["left"] = pos[i][1]
             params["tagged_user_id"] = buyers_renren_id[i]
             client.request(params)
     except:
         pass
Example #2
0
def suggest_follow(request):
    """
    Suggest both user and topic to follow
    """
    if not assert_register(request):
        return redirect('main.views.index.index')
    template_name = 'main/account/sign_up3.html'
    if request.session['status'] == 'complete_profile':
        template_name = 'main/account/registration_follow.html'
    profile = Profile.objects.get(pk=request.session['uid'])
#    if not (profile.reader_access_token or profile.renren_account or profile.sina_account):
#        messages.error(request, '请至少连接一个账号')
#        return redirect(APP_URL + "register/connect/")
    
    if request.session.has_key('name'):
        name = request.session['name']
    else: name = profile.name
    
    if request.session.has_key('bio'):
        bio = request.session['bio']
    elif profile.bio: 
        bio = profile.bio
    else:
        bio = ''
    
    #If user has connected with RenRen, then set his RenRen image by default
    #Reference: http://stackoverflow.com/questions/1393202/django-add-image-in-an-imagefield-from-image-url
    try:
        if profile.image and profile.image != 'profile/profile100x100.jpg':
            raise Exception
        
        from PIL import Image #@UnresolvedImport
        #For handling weired bug of PIL Linux package that only identifies BMP image;
        # See http://www.chipx86.com/blog/2008/07/25/django-tips-pil-imagefield-and-unit-tests/
        Image.init()
        import urllib2
        from main.utils import generate_random_file_name
        import os

        dot_index = profile.renren_head_url.rfind('.')
        image_extension = profile.renren_head_url[dot_index:]
        image_name =  generate_random_file_name(32)+image_extension 
        
        temp_name = generate_random_file_name(32)+image_extension
        temp_file_addr = MEDIA_ROOT + 'profile/' + temp_name
        temp_file = open(temp_file_addr, 'wb')
        temp_file.write(urllib2.urlopen(profile.renren_head_url).read())
        temp_file.close()
        temp_file = open(temp_file_addr, 'rb') #open for read and assign to image field in model
        
        #Deletes old image if exists
        if profile.image and profile.image != 'profile/profile100x100.jpg':
            image_addr = MEDIA_ROOT + profile.image.name
            os.remove(image_addr) #If path is a directory, OSError is raised;So no worry about removing directory
        if profile.image_small and profile.image_small != 'profile/profile25x25.jpg':
            image_small_addr = MEDIA_ROOT + profile.image_small.name
            os.remove(image_small_addr)
        
        
        profile.image.save(image_name, temp_file)
        image_small_name =  generate_random_file_name(32)+image_extension 
        profile.image_small.save(image_small_name, temp_file)
        profile.save()
        
        temp_file.close()
        os.remove(temp_file_addr)
        
    except Exception, e:
        error = repr(e)
        pass
Example #3
0
def add_wishlist(request):
    """
    Validates and saves the wishlist, all items passed here should already exist
    Since the invenience of escape and unquote string passed by javascript(results in %u..), use csrf_exempt
    This post is helpful of unescape unicode, but does not work: http://blog.tarotoast.com/2008/03/16/425/
    """
    if 'user_id' not in request.session:
        return HttpResponse('{"code":"1","msg":"尚未授权"}')
    creator_id = request.session['user_id']
    creator = Wishlist_User.objects.get(pk=creator_id)
    #Fill in for next time use
    creator.cell = request.POST['cellphone']
    creator.address = request.POST['address']
    creator.email = request.POST['email']
    creator.save() 
    client = RenRenAPIClient(creator.renren_access_token, None, RENREN_APP_KEY, RENREN_APP_SECRET)
    buyer_ids = request.POST['buyers_str'].strip(',').split(',')
    item_ids = request.POST['items_str'].strip(',').split(',')
    pub_photo = True if request.POST['pub_photo'] == 'true' else False
    pub_status = True if  request.POST['pub_status'] == 'true' else False
    notes = request.POST['notes_str'].strip('`#`').split('`#`')
    notes_dict = {}
    for note in notes:
        sindex = note.find(':')
        note_str = note[sindex+1:]
        notes_dict[note[:sindex]] = note_str if note_str != u'款式备注' else ''
    
    gifts = []
    for item_id in item_ids:        
            gift = Wishlist_Gift.objects.get(taobao_id=long(item_id))
            gifts.append(gift)     
    buyers = []
    for buyer_id in buyer_ids:        
        buyer, created = Wishlist_User.objects.get_or_create(renren_account=long(buyer_id))
        if created: #Loop up the info from friends table
            #try:
                friend_info = Wishlist_Friends.objects.filter(friend_renren=long(buyer_id))[0]
                buyer.renren_name = friend_info.friend_name
                buyer.sex = friend_info.friend_sex
                buyer.renren_tiny_url = friend_info.friend_tiny_url
                buyer.renren_head_url = friend_info.friend_head_url
                buyer.save()
            #except:
            #    pass
        buyers.append(buyer)    
        wishlist = Wishlist()
        wishlist.creator_id = creator_id
        wishlist.buyer = buyer
        wishlist.cell = request.POST['cellphone']
        wishlist.address = request.POST['address']
        wishlist.email = request.POST['email']
        wishlist.love_words = request.POST['love_words']
        wishlist.pub_photo = pub_photo
        wishlist.pub_status = pub_status
        wishlist.save()
        
        for gift in gifts:
            relation = Wishlist_Membership(wishlist=wishlist, gift=gift, note=notes_dict[item_id])
            relation.save()
    
    #Notify all the buyers
    params = {
              'method':'notifications.send',
              'format' : 'json',
              'to_ids': request.POST['buyers_str'].strip(','),
              'notification': '<xn:name uid="' + str(creator.renren_account) + '" linked="true"/> 向你许下一个心愿,去<a href="' + RENREN_APP_URL + 'give/">许愿板</a>看看吧!'
    }
    result = parse_json(client.request(params))  #On success return: { "result" : 1 }
    
    
    pub_photo = False #Disable this function
    if pub_photo:
        try:
            buyers_names = ','.join([b.renren_name.encode('utf-8') for b in buyers])
            buyers_renren_id = [b.renren_account for b in buyers]       
            for gift in gifts:
                caption = '我向' + buyers_names + '许下了心愿:' + gift.title.encode('utf-8') + '。来许愿板帮我实现吧:) ' + RENREN_APP_URL + 'give/'
                params = dict(method="photos.upload", caption=caption)
                temp_name = generate_random_file_name(32)
                temp_file_addr = settings.MEDIA_ROOT + 'apps/wishlist/' + temp_name
                temp_file = open(temp_file_addr, 'wb')
                temp_file.write(urllib2.urlopen(gift.pic_url).read())
                temp_file.close()
                headers,postdata = client.pack_image(temp_file_addr, params, caption)
                conn = httplib.HTTPConnection('api.renren.com')
                conn.request('POST', 'http://api.renren.com/restserver.do', headers=headers, body=postdata)
                resp = conn.getresponse()
                
                p_info = parse_json(resp.read())
                img = Image.open(temp_file_addr)
                width, height = img.size
                #At most three friends can be wished for, so this is more than enough
                pos = ((130,150), (130,470), (260,310), (390,150), (390,470))
                nf = len(buyers_renren_id)
                pid = p_info['pid']
                uid = p_info['uid']
                for i in range(nf): 
                    params = dict(method="photos.tag",photo_id=pid,owner_id=uid,frame_width=80,frame_height=80)
                    params["photo_width"] = width
                    params["photo_height"] = height
                    params["top"] = pos[i][0]
                    params["left"] = pos[i][1]
                    params["tagged_user_id"] = buyers_renren_id[i]
                    client.request(params)
                os.remove(temp_file_addr)
        except Exception,e:
            #logger.error(e)
            pass