Comments 28
Здесь всё великолепно: от ликования про то, что можно работать с Telegram через PHP до инклудинга «очень быстрой» библиотеки phpQuery (особенно про память, которую она сжирает) в функцию.
Согласен.
Это было почти фиаско.
Согласен.
+3
Спасибо за комментарий. Сарказм уважаю, но согласен не со всеми замечаниями :)
Ликование у меня уместно, потому что 3 месяца назад в сети я вообще не нашел никаких примеров, как же, все-таки, парсить каналы telegram. Ну и читать сухие посты без эмоций не так интересно :)
Да, код у меня не самый лучший, но он мой и я его люблю, но пока все работает очень быстро и нагрузка на php и mysql на сервере почти нулевая. На парсинг 100+ источников уходит около минуты, и большая часть этого времени — это ожидание ответов серверов.
Насчет скорости phpQuery тоже не пойму упрека. Сначала я попробовал Ganon, но он оказался в разы, а то и на порядки медленнее (да, в 10 раз). Кроме того phpQuery прекрасно работает не только с html, но и с xml, что очень удобно для парсинга RSS. По цифрам: парсинг крупных страниц, типа пикабу занимает доли секунды, точные цифры не вспомню, но ожидание ответа сервера длится намного дольше, чем сам парсинг. Так же я проверяю изменился ли hash html/xml строки перед тем, как ее парсить и искать дубликаты в базе. И подсчет md5 строки получается не намного быстрее, чем парсинг через phpQuery этой же строки.
Если вы знаете как парсить быстрее и так же удобно (привычный синтаксис селекторов это большой плюс), буду признателен за наводку.
Насчет include phpQuery внутри функции — да, решение не очень оптимальное, но функция находится внутри API, который вызывается часто, поэтому делать include в общем коде тоже не очень хорошо, а phpQuery требуется редко (раз в 5 минут). А если функция не запускается, то и include не срабатывает — это я проверил в документации php. Так что память будет расходоваться только при необходимости. Но все же, соглашусь, что надо этот момент еще раз подумать. Может быть вынести парсинг в отдельное API…
Ликование у меня уместно, потому что 3 месяца назад в сети я вообще не нашел никаких примеров, как же, все-таки, парсить каналы telegram. Ну и читать сухие посты без эмоций не так интересно :)
Да, код у меня не самый лучший
Насчет скорости phpQuery тоже не пойму упрека. Сначала я попробовал Ganon, но он оказался в разы, а то и на порядки медленнее (да, в 10 раз). Кроме того phpQuery прекрасно работает не только с html, но и с xml, что очень удобно для парсинга RSS. По цифрам: парсинг крупных страниц, типа пикабу занимает доли секунды, точные цифры не вспомню, но ожидание ответа сервера длится намного дольше, чем сам парсинг. Так же я проверяю изменился ли hash html/xml строки перед тем, как ее парсить и искать дубликаты в базе. И подсчет md5 строки получается не намного быстрее, чем парсинг через phpQuery этой же строки.
Если вы знаете как парсить быстрее и так же удобно (привычный синтаксис селекторов это большой плюс), буду признателен за наводку.
Насчет include phpQuery внутри функции — да, решение не очень оптимальное, но функция находится внутри API, который вызывается часто, поэтому делать include в общем коде тоже не очень хорошо, а phpQuery требуется редко (раз в 5 минут). А если функция не запускается, то и include не срабатывает — это я проверил в документации php. Так что память будет расходоваться только при необходимости. Но все же, соглашусь, что надо этот момент еще раз подумать. Может быть вынести парсинг в отдельное API…
+1
У меня вопрос: правила телеграмм не запрещают хранить сообщения на своём сервере? А удаленные сообщения?
+1
Это же общедоступная информация, которую можно получить просто из браузера даже без аккаунта в телеграме (в статье есть пример ссылки на пост из mash). Это не личная переписка. Так что, думаю, что никакой конфиденциальности я не нарушаю. Да и пользователей пока человек 20-30 от силы, так что проект слишком маленький для разбирательств :)
0
Мне кажется, что эти правила вообще не касаются парсеров.
Т.е. смысл такой: если пользователь на моем сайте вводит свой логин и пароль от своего телеграма и начинает использовать мой сайт, как клиент телеграма: читать секретные чаты, и его чаты хранятся у меня в базе и не удаляются — то это запрещено. Но пользователь, то не использует мой сайт как клиент телеграма, я не создаю «third-party client apps». Я использую клиент телеграма и свой аккаунт, что бы получать нужные мне данные и делюсь этими общедоступными данными со своими пользователями. Мои пользователи при этом не являются пользователями телеграма.
Так что не вижу никакой разницы с тем же vk api c точки зрения закона. В vk я тоже иногда парсю какой нибудь пост, а его потом удаляют. Но я то у себя его храню (впрочем как и google cache).
We welcome all developers to use our API and source code to create Telegram-like messaging applications on our platform free of charge. In order to ensure consistency and security across the Telegram ecosystem, all third-party client apps must comply with the following Terms of Service.
It is forbidden to interfere with the basic functionality of Telegram.
Т.е. смысл такой: если пользователь на моем сайте вводит свой логин и пароль от своего телеграма и начинает использовать мой сайт, как клиент телеграма: читать секретные чаты, и его чаты хранятся у меня в базе и не удаляются — то это запрещено. Но пользователь, то не использует мой сайт как клиент телеграма, я не создаю «third-party client apps». Я использую клиент телеграма и свой аккаунт, что бы получать нужные мне данные и делюсь этими общедоступными данными со своими пользователями. Мои пользователи при этом не являются пользователями телеграма.
Так что не вижу никакой разницы с тем же vk api c точки зрения закона. В vk я тоже иногда парсю какой нибудь пост, а его потом удаляют. Но я то у себя его храню (впрочем как и google cache).
0
Для таких случаев они выпустили core.telegram.org/tdlib
+2
Хм, интересно! Но что то по php примеров нет, и ответы на github не воодушевляют…
Вообще мне с телеграмом работать было очень сложно. Особенно если сравнивать с vk api… Надеюсь что, в будущем, с ростом популярности, они упростят жизнь сторонних разработчиков, но пока что-то все СЛОЖНА, на мой взгляд.
Вообще мне с телеграмом работать было очень сложно. Особенно если сравнивать с vk api… Надеюсь что, в будущем, с ростом популярности, они упростят жизнь сторонних разработчиков, но пока что-то все СЛОЖНА, на мой взгляд.
-1
PHP Extension for tdlib/td written with PHP-CPP
https://github.com/yaroslavche/phptdlib
https://github.com/yaroslavche/phptdlib
0
А можно как-нибудь читать телеграм-каналы через rss? Нигде не попадалось.
0
Сервисов, что бы читать телеграм каналы где то кроме телеграма вообще почти нет, поэтому я пост и запилил.
Я видел какой то сервис, где сами владельцы телеграм каналов должны их отправлять на модерацию и потом их канал автоматически конвертируется в блог.
У меня в агрегаторе вывода rss к сожалению нет, я сделал просто ленту новостей из всех выбранных источников, включая любые телеграм каналы. Тоесть по сути у меня онлайн rss читалка, но с большим выбором дополнительных источников данных.
Я видел какой то сервис, где сами владельцы телеграм каналов должны их отправлять на модерацию и потом их канал автоматически конвертируется в блог.
У меня в агрегаторе вывода rss к сожалению нет, я сделал просто ленту новостей из всех выбранных источников, включая любые телеграм каналы. Тоесть по сути у меня онлайн rss читалка, но с большим выбором дополнительных источников данных.
0
У меня скоро будет можно и не только телеграм (тоже делаю свой аггрегатор)
0
Сделал быстрый многопоточный парсер телеграма на swoole, который еще и ссылки на картинки из вэбпревью постов подтягивает.
http://proxy.i-c-a.su:9503/?url=breakingmash
Еще можно получить фид в json:
http://proxy.i-c-a.su:9503/?url=breakingmash&format=json
В параметре url можно указывать любые адреса публичных каналов.
Так же сделал на основном сайте отдачу ленты в rss для зарегестрированных пользователей.
З.Ы. Хочу написать пост про то как пользоваться swoole (аналог nodejs на php), но пока не получается время выкроить :(
http://proxy.i-c-a.su:9503/?url=breakingmash
Еще можно получить фид в json:
http://proxy.i-c-a.su:9503/?url=breakingmash&format=json
В параметре url можно указывать любые адреса публичных каналов.
Так же сделал на основном сайте отдачу ленты в rss для зарегестрированных пользователей.
З.Ы. Хочу написать пост про то как пользоваться swoole (аналог nodejs на php), но пока не получается время выкроить :(
0
К сожалению, тот же feedly не смог переварить такую ссылку на rss. А, зарегистрировавшись, не смог найти найти, как получить ленту в rss.
0
Есть код в открытом доступе?
0
Вы сделали классный инструмент, но в RSS не смог найти ссылку на картинки… Что очень на самом деле важно.
0
Ссылки раньше были включены по умолчанию, но с ними возникали проблемы: если t.me переставал отвечать на запросы (soft ban), то скрипт падал целиком.
Я нашел место, где у меня был необрабатываемый exception, но по умолчанию изображения убрал.
Можете включить, добавив параметр `&images=1`:
http://proxy.i-c-a.su/?url=breakingmash&images=1
Я нашел место, где у меня был необрабатываемый exception, но по умолчанию изображения убрал.
Можете включить, добавив параметр `&images=1`:
http://proxy.i-c-a.su/?url=breakingmash&images=1
0
Привет всем, кто использует мой тестовый парсер телеграм.
Я запустил вторую версию сервиса по конвертации телеграм в RSS. Стабильнее, с полностью валидным RSS и полной поддержкой медиафайлов!
Просьба перейти на использование нового парсера: tg.i-c-a.su
http://proxy.i-c-a.su:9503 будет отключен через 1-2 месяца.
Я запустил вторую версию сервиса по конвертации телеграм в RSS. Стабильнее, с полностью валидным RSS и полной поддержкой медиафайлов!
Просьба перейти на использование нового парсера: tg.i-c-a.su
http://proxy.i-c-a.su:9503 будет отключен через 1-2 месяца.
0
Добрый день. А как через Ваш сервис получить userpic телеграм-канала?
0
Привет. В telegramRSS (это проект который выступает бэкэндом для публичной демки) нет такой возможности. Но идея хорошая. Добавлю в будущем.
Если используете свой инстанс TelegramApiServer или madelineProto, то надо вызвать getPropicInfo для канала/юзера и скачать полученный media через любой downloadTo* метод.
0
UFO just landed and posted this here
Sign up to leave a comment.
Парсинг постов из telegram каналов на PHP