コード例 #1
0
ファイル: admin.py プロジェクト: 11m09d/weixin_market
 def save_model(self, request, obj, form, change):
     """
     Sends a tweet with the title/short_url if applicable.
     """
     super(TweetableAdminMixin, self).save_model(request, obj, form, change)
     if Api and request.POST.get("send_tweet", False):
         auth_settings = get_auth_settings()
         obj.set_short_url()
         message = truncatechars(obj, 140 - len(obj.short_url) - 1)
         api = Api(*auth_settings)
         api.PostUpdate("%s %s" % (message, obj.short_url))
コード例 #2
0
ファイル: admin.py プロジェクト: 11m09d/weixin_market
 def formfield_for_dbfield(self, db_field, **kwargs):
     """
     Adds the "Send to Twitter" checkbox after the "status" field,
     provided by any ``Displayable`` models. The approach here is
     quite a hack, however the sane approach of using a custom
     form with a boolean field defined, and then adding it to the
     formssets attribute of the admin class fell apart quite
     horrifically.
     """
     formfield = super(TweetableAdminMixin,
         self).formfield_for_dbfield(db_field, **kwargs)
     if Api and db_field.name == "status" and get_auth_settings():
         def wrapper(render):
             def wrapped(*args, **kwargs):
                 rendered = render(*args, **kwargs)
                 label = _("Send to Twitter")
                 return mark_safe(rendered + FORMFIELD_HTML % label)
             return wrapped
         formfield.widget.render = wrapper(formfield.widget.render)
     return formfield
コード例 #3
0
 def formfield_for_dbfield(self, db_field, **kwargs):
     """
     Enhanced version of TweetableAdminMixin's method
     """
     formfield = super(TweetImageAdminMixin,
         self).formfield_for_dbfield(db_field, **kwargs)
     if Api and db_field.name == "status" and get_auth_settings():
         def wrapper(render):
             def wrapped(*args, **kwargs):
                 rendered = render(*args, **kwargs)
                 text_label = _("Send Tweet")
                 image_label = _("Tweet with Image")
                 image_html = IMAGE_CB_HTML.format(image_label)
                 tweet_html = ""
                 if self.text_or_image:
                     tweet_html = TWEET_CB_HTML.format(text_label)
                 return mark_safe(rendered + FORMFIELD_HTML.format(
                     tweet_html, image_html))
             return wrapped
         formfield.widget.render = wrapper(formfield.widget.render)
     return formfield
コード例 #4
0
ファイル: models.py プロジェクト: JPWKU/mezzanine
 def run(self):
     """
     Request new tweets from the Twitter API.
     """
     try:
         value = quote(self.value)
     except KeyError:
         value = self.value
     urls = {
         QUERY_TYPE_USER: ("https://api.twitter.com/1.1/statuses/"
                           "user_timeline.json?screen_name=%s"
                           "&include_rts=true" % value.lstrip("@")),
         QUERY_TYPE_LIST: ("https://api.twitter.com/1.1/lists/statuses.json"
                           "?list_id=%s&include_rts=true" % value),
         QUERY_TYPE_SEARCH: "https://api.twitter.com/1.1/search/tweets.json"
                            "?q=%s" % value,
     }
     try:
         url = urls[self.type]
     except KeyError:
         raise TwitterQueryException("Invalid query type: %s" % self.type)
     settings.use_editable()
     auth_settings = get_auth_settings()
     if not auth_settings:
         from mezzanine.conf import registry
         if self.value == registry["TWITTER_DEFAULT_QUERY"]["default"]:
             # These are some read-only keys and secrets we use
             # for the default query (eg nothing has been configured)
             auth_settings = (
                 "KxZTRD3OBft4PP0iQW0aNQ",
                 "sXpQRSDUVJ2AVPZTfh6MrJjHfOGcdK4wRb1WTGQ",
                 "1368725588-ldWCsd54AJpG2xcB5nyTHyCeIC3RJcNVUAkB1OI",
                 "r9u7qS18t8ad4Hu9XVqmCGxlIpzoCN3e1vx6LOSVgyw3R",
             )
         else:
             raise TwitterQueryException("Twitter OAuth settings missing")
     try:
         tweets = requests.get(url, auth=OAuth1(*auth_settings)).json()
     except Exception as e:
         raise TwitterQueryException("Error retrieving: %s" % e)
     try:
         raise TwitterQueryException(tweets["errors"][0]["message"])
     except (IndexError, KeyError, TypeError):
         pass
     if self.type == "search":
         tweets = tweets["statuses"]
     for tweet_json in tweets:
         remote_id = str(tweet_json["id"])
         tweet, created = self.tweets.get_or_create(remote_id=remote_id)
         if not created:
             continue
         if "retweeted_status" in tweet_json:
             user = tweet_json['user']
             tweet.retweeter_user_name = user["screen_name"]
             tweet.retweeter_full_name = user["name"]
             tweet.retweeter_profile_image_url = user["profile_image_url"]
             tweet_json = tweet_json["retweeted_status"]
         if self.type == QUERY_TYPE_SEARCH:
             tweet.user_name = tweet_json['user']['screen_name']
             tweet.full_name = tweet_json['user']['name']
             tweet.profile_image_url = \
                     tweet_json['user']["profile_image_url"]
             date_format = "%a %b %d %H:%M:%S +0000 %Y"
         else:
             user = tweet_json["user"]
             tweet.user_name = user["screen_name"]
             tweet.full_name = user["name"]
             tweet.profile_image_url = user["profile_image_url"]
             date_format = "%a %b %d %H:%M:%S +0000 %Y"
         tweet.text = urlize(tweet_json["text"])
         tweet.text = re_usernames.sub(replace_usernames, tweet.text)
         tweet.text = re_hashtags.sub(replace_hashtags, tweet.text)
         if getattr(settings, 'TWITTER_STRIP_HIGH_MULTIBYTE', False):
             chars = [ch for ch in tweet.text if ord(ch) < 0x800]
             tweet.text = ''.join(chars)
         d = datetime.strptime(tweet_json["created_at"], date_format)
         tweet.created_at = make_aware(d, utc)
         try:
             tweet.save()
         except Warning:
             pass
         tweet.save()
     self.interested = False
     self.save()
コード例 #5
0
 def tweet_item(self, request, queryset):
     auth_settings = get_auth_settings()
コード例 #6
0
ファイル: models.py プロジェクト: psentinelli/mezzanine_MY
 def run(self):
     """
     Request new tweets from the Twitter API.
     """
     try:
         value = quote(self.value)
     except KeyError:
         value = self.value
     urls = {
         QUERY_TYPE_USER: ("https://api.twitter.com/1.1/statuses/"
                           "user_timeline.json?screen_name=%s"
                           "&include_rts=true" % value.lstrip("@")),
         QUERY_TYPE_LIST: ("https://api.twitter.com/1.1/lists/statuses.json"
                           "?list_id=%s&include_rts=true" % value),
         QUERY_TYPE_SEARCH: "https://api.twitter.com/1.1/search/tweets.json"
                            "?q=%s" % value,
     }
     try:
         url = urls[self.type]
     except KeyError:
         raise TwitterQueryException("Invalid query type: %s" % self.type)
     auth_settings = get_auth_settings()
     if not auth_settings:
         from mezzanine.conf import registry
         if self.value == registry["TWITTER_DEFAULT_QUERY"]["default"]:
             # These are some read-only keys and secrets we use
             # for the default query (eg nothing has been configured)
             auth_settings = (
                 "KxZTRD3OBft4PP0iQW0aNQ",
                 "sXpQRSDUVJ2AVPZTfh6MrJjHfOGcdK4wRb1WTGQ",
                 "1368725588-ldWCsd54AJpG2xcB5nyTHyCeIC3RJcNVUAkB1OI",
                 "r9u7qS18t8ad4Hu9XVqmCGxlIpzoCN3e1vx6LOSVgyw3R",
             )
         else:
             raise TwitterQueryException("Twitter OAuth settings missing")
     try:
         tweets = requests.get(url, auth=OAuth1(*auth_settings)).json()
     except Exception as e:
         raise TwitterQueryException("Error retrieving: %s" % e)
     try:
         raise TwitterQueryException(tweets["errors"][0]["message"])
     except (IndexError, KeyError, TypeError):
         pass
     if self.type == "search":
         tweets = tweets["statuses"]
     for tweet_json in tweets:
         remote_id = str(tweet_json["id"])
         tweet, created = self.tweets.get_or_create(remote_id=remote_id)
         if not created:
             continue
         if "retweeted_status" in tweet_json:
             user = tweet_json['user']
             tweet.retweeter_user_name = user["screen_name"]
             tweet.retweeter_full_name = user["name"]
             tweet.retweeter_profile_image_url = user["profile_image_url"]
             tweet_json = tweet_json["retweeted_status"]
         if self.type == QUERY_TYPE_SEARCH:
             tweet.user_name = tweet_json['user']['screen_name']
             tweet.full_name = tweet_json['user']['name']
             tweet.profile_image_url = \
                     tweet_json['user']["profile_image_url"]
             date_format = "%a %b %d %H:%M:%S +0000 %Y"
         else:
             user = tweet_json["user"]
             tweet.user_name = user["screen_name"]
             tweet.full_name = user["name"]
             tweet.profile_image_url = user["profile_image_url"]
             date_format = "%a %b %d %H:%M:%S +0000 %Y"
         tweet.text = urlize(tweet_json["text"])
         tweet.text = re_usernames.sub(replace_usernames, tweet.text)
         tweet.text = re_hashtags.sub(replace_hashtags, tweet.text)
         if getattr(settings, 'TWITTER_STRIP_HIGH_MULTIBYTE', False):
             chars = [ch for ch in tweet.text if ord(ch) < 0x800]
             tweet.text = ''.join(chars)
         d = datetime.strptime(tweet_json["created_at"], date_format)
         tweet.created_at = make_aware(d, utc)
         try:
             tweet.save()
         except Warning:
             pass
         tweet.save()
     self.interested = False
     self.save()