~kai-mast/friends/keep-mentions

« back to all changes in this revision

Viewing changes to friends/protocols/twitter.py

  • Committer: Robert Bruce Park
  • Date: 2014-01-24 18:11:23 UTC
  • mfrom: (248.1.9 links)
  • Revision ID: robert.park@canonical.com-20140124181123-jbc86iw0lu9js9bz
Support multiple links per tweet, thanks to Kai Mast.

Show diffs side-by-side

added added

removed removed

Lines of Context:
125
125
        message = retweet.get('text', '') or tweet.get('text', '')
126
126
        picture_url = ''
127
127
 
128
 
        #Resolve t.co
129
 
        #TODO support more than one url and/or media file
130
 
        for url in (entities.get('urls', []) + entities.get('media', [])):
131
 
            begin, end = url.get('indices', (None, None))
132
 
 
133
 
            expanded_url = url.get('expanded_url', '')
134
 
            display_url = url.get('display_url', '')
135
 
            other_url = url.get('url', '')
 
128
        urls = {}
 
129
 
 
130
        for url in (entities.get('urls', []) +
 
131
                    entities.get('media', []) +
 
132
                    entities.get('user_mentions', []) +
 
133
                    entities.get('hashtags', [])):
 
134
            begin, end = url.get('indices', (None, None))
 
135
 
 
136
            #Drop invalid entities (just to be safe)
 
137
            if None not in (begin, end):
 
138
                urls[begin] = url
 
139
 
 
140
        for key, url in sorted(urls.items(), reverse=True):
 
141
            begin, end = url.get('indices', (None, None))
 
142
 
 
143
            expanded_url = url.get('expanded_url')
 
144
            display_url = url.get('display_url')
 
145
            other_url = url.get('url')
 
146
 
 
147
            mention_name = url.get('screen_name')
136
148
 
137
149
            picture_url = url.get('media_url', picture_url)
138
150
 
 
151
            hashtag = url.get('text')
 
152
 
 
153
            content = None
 
154
 
139
155
            # Friends has no notion of display URLs, so this is handled at the protocol level
140
 
            if None not in (begin, end):
141
 
                message = ''.join([
142
 
                    message[:begin],
143
 
                    '<a href="',
144
 
                    (expanded_url or other_url),
145
 
                    '">',
146
 
                    (display_url or other_url),
147
 
                    '</a>',
148
 
                    message[end:]])
 
156
            if (other_url or expanded_url):
 
157
                content = self._linkify(expanded_url or other_url,
 
158
                                        display_url or other_url)
 
159
 
 
160
            # Linkify hashtags until supported by friends-app
 
161
            if hashtag:
 
162
                content = self._linkify('https://twitter.com/search?q=%23' +
 
163
                                        hashtag + '&src=hash', '#' + hashtag)
 
164
 
 
165
            # Linkify a mention until they are supported natively by friends
 
166
            if mention_name:
 
167
                content = self._linkify_mention(mention_name)
 
168
 
 
169
            if content:
 
170
                message = ''.join([message[:begin], content, message[end:]])
149
171
 
150
172
        if retweet:
151
 
            message = 'RT @{}: {}'.format(
152
 
                retweet.get('user', {}).get('screen_name', ''),
 
173
            message = 'RT {}: {}'.format(
 
174
                self._linkify_mention(retweet.get('user', {}).get('screen_name', '')),
153
175
                message
154
176
            )
155
177
 
169
191
            )
170
192
        return permalink
171
193
 
 
194
    def _linkify_mention(self, name):
 
195
        return self._linkify('https://twitter.com/' + name, '@' + name)
 
196
 
 
197
    def _linkify(self, address, name):
 
198
        return '<a href="{}">{}</a>'.format(address, name)
 
199
 
172
200
    def _append_since(self, url, stream='messages'):
173
201
        since = self._tweet_ids.get(stream)
174
202
        if since is not None: