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
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 & 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)
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