コード例 #1
0
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)
コード例 #2
0
    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()
コード例 #3
0
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)
コード例 #4
0
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)
コード例 #5
0
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)
コード例 #6
0
    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()