def tweet_comment(comment, access_token, access_token_secret, request=None): quest_url = get_share_page_url_with_tracking(comment, comment.author, 'twitter', absolute=True) @bgwork.defer def rewards(): economy.credit_personal_twitter_share(comment.author) if comment.parent_comment is None: title = comment.title message = u'I just created a Quest on @DrawQuest: "{}" Come draw it with me! {}'.format( comment.title, quest_url) else: message = u'"{}" {} via @DrawQuest'.format( comment.parent_comment.title, quest_url) try: Twitter(access_token, access_token_secret).tweet(message) except (InvalidTwitterAccessToken, TwitterAccountSuspendedError) as e: raise e except TwitterError: client.captureException() if request: Metrics.share_to_twitter_from_publish_error.record(request, quest=quest_url)
def share(self, request=None, reward=True, share_in_bgwork=True, fail_silently=True): if self.user.id != self.comment.author_id: raise ServiceError("You can't share to your timeline a drawing you didn't create.") try: self.user.facebookuser except FacebookUser.DoesNotExist: raise ServiceError("Can't share to your timeline if you haven't added your Facebook account yet.") quest_url = get_share_page_url_with_tracking(self.get_share_obj(), self.user, 'facebook', absolute=True) if reward: @bgwork.defer def rewards(): economy.credit_personal_share(self.user) if self.is_ugq(): verb = 'create' else: # Although we've renamed it to "draw", Facebook still internally refers to it as "complete". verb = 'complete' send_action = '{}:{}'.format(settings.FACEBOOK_NAMESPACE, verb) def do_graph_action(): graph = GraphAPI(self.access_token) #if (e.error_code == 3502 # or "An unexpected error has occurred." in e.message): try: post_data = urllib.urlencode({'quest': quest_url}) post_data += '&fb:explicitly_shared=true' graph.request('me/{}'.format(send_action), post_data=post_data) if request: Metrics.share_to_timeline.record(request, quest=quest_url) self.delete() except GraphAPIError as e: if request: Metrics.share_to_timeline_error.record(request, quest=quest_url) if fail_silently: client.captureException() else: raise e if share_in_bgwork: bgwork.defer(do_graph_action) else: do_graph_action()
def post_photo(user, blog_hostname, comment): tumblr = OAuth1Service( name='tumblr', consumer_key=user_token, consumer_secret=user_secret, request_token_url='http://www.tumblr.com/oauth/request_token', authorize_url='http://www.tumblr.com/oauth/authorize', access_token_url='http://www.tumblr.com/oauth/access_token', ) image_data = requests.get( comment.details().content.get_absolute_url_for_image_type( 'original')).content image_data = urllib2.quote(image_data) url = get_share_page_url_with_tracking(comment, user, 'tumblr') params = { 'type': 'photo', 'state': 'published', 'tags': 'DrawQuest', 'link': url, 'source': url, 'caption': comment.quest.title + ' on DrawQuest', 'data': [image_data], } resp = tumblr.post( 'http://api.tumblr.com/v2/blog/{0}/post'.format(blog_hostname), params, access_token=access_token, access_token_secret=access_token_secret) resp.raise_for_status() if resp.json['meta'][ 'status'] != 201: # 201: Created. http://www.tumblr.com/docs/en/api/v2#posting raise ServiceError("Error posting to Tumblr: " + resp.json['meta']['msg']) @bgwork.defer def rewards(): economy.credit_personal_share(user)
def tweet_comment(comment, access_token, access_token_secret, request=None): quest_url = get_share_page_url_with_tracking(comment, comment.author, 'twitter', absolute=True) @bgwork.defer def rewards(): economy.credit_personal_twitter_share(comment.author) if comment.parent_comment is None: title = comment.title message = u'I just created a Quest on @DrawQuest: "{}" Come draw it with me! {}'.format(comment.title, quest_url) else: message = u'"{}" {} via @DrawQuest'.format(comment.parent_comment.title, quest_url) try: Twitter(access_token, access_token_secret).tweet(message) except (InvalidTwitterAccessToken, TwitterAccountSuspendedError) as e: raise e except TwitterError: client.captureException() if request: Metrics.share_to_twitter_from_publish_error.record(request, quest=quest_url)
def post_photo(user, blog_hostname, comment): tumblr = OAuth1Service( name='tumblr', consumer_key=user_token, consumer_secret=user_secret, request_token_url='http://www.tumblr.com/oauth/request_token', authorize_url='http://www.tumblr.com/oauth/authorize', access_token_url='http://www.tumblr.com/oauth/access_token', ) image_data = requests.get(comment.details().content.get_absolute_url_for_image_type('original')).content image_data = urllib2.quote(image_data) url = get_share_page_url_with_tracking(comment, user, 'tumblr') params = { 'type': 'photo', 'state': 'published', 'tags': 'DrawQuest', 'link': url, 'source': url, 'caption': comment.quest.title + ' on DrawQuest', 'data': [image_data], } resp = tumblr.post('http://api.tumblr.com/v2/blog/{0}/post'.format(blog_hostname), params, access_token=access_token, access_token_secret=access_token_secret) resp.raise_for_status() if resp.json['meta']['status'] != 201: # 201: Created. http://www.tumblr.com/docs/en/api/v2#posting raise ServiceError("Error posting to Tumblr: " + resp.json['meta']['msg']) @bgwork.defer def rewards(): economy.credit_personal_share(user)
def share(self, request=None, reward=True, share_in_bgwork=True, fail_silently=True): if self.user.id != self.comment.author_id: raise ServiceError( "You can't share to your timeline a drawing you didn't create." ) try: self.user.facebookuser except FacebookUser.DoesNotExist: raise ServiceError( "Can't share to your timeline if you haven't added your Facebook account yet." ) quest_url = get_share_page_url_with_tracking(self.get_share_obj(), self.user, 'facebook', absolute=True) if reward: @bgwork.defer def rewards(): economy.credit_personal_share(self.user) if self.is_ugq(): verb = 'create' else: # Although we've renamed it to "draw", Facebook still internally refers to it as "complete". verb = 'complete' send_action = '{}:{}'.format(settings.FACEBOOK_NAMESPACE, verb) def do_graph_action(): graph = GraphAPI(self.access_token) #if (e.error_code == 3502 # or "An unexpected error has occurred." in e.message): try: post_data = urllib.urlencode({'quest': quest_url}) post_data += '&fb:explicitly_shared=true' graph.request('me/{}'.format(send_action), post_data=post_data) if request: Metrics.share_to_timeline.record(request, quest=quest_url) self.delete() except GraphAPIError as e: if request: Metrics.share_to_timeline_error.record(request, quest=quest_url) if fail_silently: client.captureException() else: raise e if share_in_bgwork: bgwork.defer(do_graph_action) else: do_graph_action()