예제 #1
0
 def process_update(self, status):
     data=status
     m = EncodedMessage()
     m.id=data['id']
     log("Update")
     log(str(status))
     # m['mentions'] = set()
     if data.get('reblog'):
         cont = data['reblog']
         acct=data['account']['acct']
         if not '@' in acct:
             acct=acct+'@'+self.server_name
         m.from_mid=acct
         m.add_mentions("@" + acct)
         to_out = "@{} reblog status of @{}:\n".format(
             data['account']['acct'],
             data['reblog']['account']['acct'])
     else:
         cont = data
         acct=data['account']['acct']
         if not '@' in acct:
             acct=acct+'@'+self.server_name
         m.from_mid=acct
         # m['mentions'].add("@" + acct)
         m.add_mentions("@" + acct)
         to_out = ''
     parser = html_parser.MyHTMLParser()
     print(cont['content'])
     cont['content']=re.sub(r'\n','',cont['content'])
     parser.feed(cont['content'])
     parser.close()
     text = parser.get_result()
     to_out += text
     if cont.get('spoiler_text'):
         parser.feed(cont['spoiler_text'])
         parser.close()
         text = parser.get_result()
         to_out = "Spoiler text: "+text+"\n"+to_out
     media_list = cont.get('media_attachments')
     for u in media_list:
         to_out += "\n" + u['url']
     mentions = cont.get('mentions')
     for a in mentions:
         if not '@' in a['acct']:
             a['acct']+='@'+self.server_name
         # m['mentions'].add('@' + a['acct'])
         m.add_mentions("@" + a['acct'])
     m.url = cont['url']
     m.visibility = cont['visibility']
     m.id = cont['id']
     if data.get('reblog'):
         m.text=to_out
     else:
         m.text="@" + cont['account']['acct'] + ": " + to_out
         m.in_reply_to_id=cont['in_reply_to_id']
     # return m
     # self.update_q.put({'mid': self.mid, 'status': m})
     return m
예제 #2
0
    def test_html_parser(self):
        html = '''<p>Катали с приятелем в двухдневный поход на выходных.
        Наснимал немножко видео и попробовал немножко помонтировать. Прошу смотреть и оценивать.<br>
        День первый: <a href="https://www.youtube.com/watch?v=Rma0SafnztU" rel="nofollow noopener noreferrer" target="_blank">youtube.com</a></p>
        <a href="https://juick.com/tag/%D0%B2%D0%B5%D0%BB%D0%BE" rel="nofollow noopener noreferrer" target="_blank">#вело</a>
        <a href="https://juick.com/tag/bike" rel="nofollow noopener noreferrer" target="_blank">#bike</a>

'''
        p = html_parser.MyHTMLParser()
        p.feed(html)
        p.close()
        text = p.get_result()
        # print("HTML parser text:'"+ text+"'")
        sample_text = '''
Катали с приятелем в двухдневный поход на выходных.        Наснимал немножко видео и попробовал немножко помонтировать. Прошу смотреть и оценивать.
        День первый: https://www.youtube.com/watch?v=Rma0SafnztU        #вело        #bike'''
        # print("HTML parser sample:'"+ sample_text + "'")
        self.assertEqual(text, sample_text)

        html = '''<p>Сегодня снова колесил <a href="https://mastodon.host/tags/%D0%BF%D0%BE%D0%BB%D1%81%D1%82%D0%B0" class="mention hashtag
" rel="nofollow noopener noreferrer" target="_blank">#<span>полста</span></a>. Дежурный маршрут: после дождей другое слиш
ком рисковано.</p><p>Наконец начал методично работать над силой: только первый тягун преодолел на 22:28, а остальные — то
лько на повышающих передачах (минимум 1,05).</p><p>Несмотря на обилие <a href="https://mastodon.host/tags/%D1%84%D0%BE%D1
%82%D0%BE" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>фото</span></a> остановок, с
редний темп более 22 км/ч.</p><p>Фото в комментариях.</p><p><span class="h-card"><a href="https://mastodon.ml/@rf" class=
"u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>rf</span></a></span> <span class="h-card"><a hr
ef="https://mastodon.social/@russian_mastodon" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@
<span>russian_mastodon</span></a></span></p>
'''
        sample_text = '''
Сегодня снова колесил  #полста. Дежурный маршрут: после дождей другое слишком рисковано.
Наконец начал методично работать над силой: только первый тягун преодолел на 22:28, а остальные — только на повышающих передачах (минимум 1,05).
Несмотря на обилие  #фото остановок, средний темп более 22 км/ч.
Фото в комментариях.
@rf @russian_mastodon'''
        p = html_parser.MyHTMLParser()
        p.feed(html)
        p.close()
        text = p.get_result()
        # print(text)
        self.assertEqual(text, sample_text)
        html = '<p>Я несколько лет не посещал этот сайт, с удивлением обнаружил, что он всё ещё жив и даже пополнился новыми фичами:</p><p>«Российский дзен. Бессмысленный и беспощадный».<br><a href="https://zenrus.ru/" rel="nofollow noopener noreferrer" target="_blank"><span class="invisible">https://</span><span class="">zenrus.ru/</span><span class="invisible"></span></a></p>'
        sample_text = '''
Я несколько лет не посещал этот сайт, с удивлением обнаружил, что он всё ещё жив и даже пополнился новыми фичами:
«Российский дзен. Бессмысленный и беспощадный».
https://zenrus.ru/'''
        p = html_parser.MyHTMLParser()
        p.feed(html)
        p.close()
        text = p.get_result()
        # print(text)
        self.assertEqual(text, sample_text)
        html = '@<span class=""><a href="https://mastodon.host/users/velociraptor" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank"><span class="mention">velociraptor</span></a></span> ИМХО зря покрасили, лубок получился. Или это всегда так было?'
        sample_text = '@velociraptor ИМХО зря покрасили, лубок получился. Или это всегда так было?'
        p = html_parser.MyHTMLParser()
        p.feed(html)
        p.close()
        text = p.get_result()
        # print(text)
        self.assertEqual(text, sample_text)
        html = '''Отдыхаете? Карантините помаленьку?<br><br>А мы пашем!!!<br><br>#<a href="https://friends.deko.cloud/search?tag=%D0%A2%D0%B0%D0%BA%D0%B8%D0%B5%D0%94%D0%B5%D0%BB%D0%B0" class="" rel="nofollow noopener noreferrer" target="_blank">ТакиеДела</a>
<p><span class="h-card"><a href="https://friends.deko.cloud/profile/shuro" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>shuro</span></a></span> Жму руку.</p>'''
        sample_text = '''Отдыхаете? Карантините помаленьку?

А мы пашем!!!

#ТакиеДела
@shuro Жму руку.'''
        p = html_parser.MyHTMLParser()
        p.feed(html)
        p.close()
        text = p.get_result()
        # print(text)
        self.assertEqual(text, sample_text)
        html = '''<p>Будет что послушать, иначе Aleckat &amp; Hynamo затеру до дыр. \n<a href="https://sound.skrep.in/library/albums/4" rel="nofollow noopener noreferrer" target="_blank"></a><a href="https://sound.skrep.in/library/albums/4" rel="nofollow noopener noreferrer" target="_blank">https://sound.skrep.in/library/albums/4</a>/</p>'''
        sample_text = '''
Будет что послушать, иначе Aleckat & Hynamo затеру до дыр. https://sound.skrep.in/library/albums/4/'''
        p = html_parser.MyHTMLParser()
        p.feed(html)
        p.close()
        text = p.get_result()
        #print("HTML parser text:'"+ text+"'")
        # print(text)
        self.assertEqual(text, sample_text)
예제 #3
0
 def process_notification(self, status):
     data=status
     parser = html_parser.MyHTMLParser()
     m=EncodedMessage()
     print("process_notification")
     log("Notification")
     log(str(status))
     m.id=data.get('id')
     m.type=data.get('type')
     to_out=''
     m.from_mid=data['account']['acct']
     if not '@' in m.from_mid:
             m.from_mid=m.from_mid+'@'+self.server_name
     if data['type'] == 'follow':
         to_out = "@{} follows you\n{}".format(
                         data['account']['acct'],
                         data['account']['url'])
     elif data['type'] == 'reblog':
         data['status']['content']=re.sub(r'\n','',data['status']['content'])
         parser.feed(data['status']['content'])
         m.in_reply_to_id=data['status']['in_reply_to_id']
         parser.close()
         text=parser.get_result()
         m.id=data['status']['id']
         m.url=data['status']['url']
         m.visibility=data['status']['visibility']
         to_out = "@{} reblog your status:\n{}".format(
                         data['account']['username'],
                         text)
         media_list = data['status'].get('media_attachments')
         for u in media_list:
             to_out += "\n" + u['url']
     elif data['type'] == 'favourite':
         data['status']['content']=re.sub(r'\n','',data['status']['content'])
         parser.feed(data['status']['content'])
         parser.close()
         m.id=data['status']['id']
         m.url=data['status']['url']
         m.visibility=data['status']['visibility']
         text=parser.get_result()
         to_out = "@{} favourited your status:\n{}".format(
                         data['account']['acct'],
                         text)
         media_list = data['status'].get('media_attachments')
         for u in media_list:
             to_out += "\n" + u['url']
     elif data['type']=='mention':
         data['status']['content']=re.sub(r'\n','',data['status']['content'])
         parser.feed(data['status']['content'])
         parser.close()
         m.id=data['status']['id']
         acct=data['account']['acct']
         m.in_reply_to_id=data['status']['in_reply_to_id']
         if not '@' in acct:
             acct=acct+'@'+self.server_name
         m.add_mentions("@" + acct)
         m.url=data['status']['url']
         m.visibility=data['status']['visibility']
         mentions = data['status']['mentions']
         for a in mentions:
             if not '@' in a['acct']:
                 a['acct']+='@'+self.server_name
             m.add_mentions('@' + a['acct'])
         text=parser.get_result()
         to_out = "@{}:{}".format(
                         data['account']['username'],
                         text)
         media_list = data['status'].get('media_attachments')
         for u in media_list:
             to_out += "\n" + u['url']
     elif data['type'] == 'follow_request':
         to_out = "@{} wants to follow you:\n{}".format(
                         data['account']['acct'],
                         data['account']['url'])
     
     m.text=to_out
     return m