• Микросервисы на php и swoole для конвертации телеграм каналов в RSS
    0
    Hello, danog!

    Im very pleased, its good to know that my work is useful! And i want to thank you for super easy step-by-step setup in madelineProto! :)

    Thanks for example in bot.php, i will use async mode in madelineProto in my lib ASAP.

    Also i'll try to use amphp in TelegramSwooleClient as alternative to swoole, when swoole extension is not available.

    What do you need from me, to make TelegramSwooleClient official successor of PWRTelegram?
  • Микросервисы на php и swoole для конвертации телеграм каналов в RSS
    0
    mmasiukevich спасибо за объективную критику, касательно блокирующих операций. Заменил стандартный Curl на \Swoole\Coroutine\Http\Client. Пришлось переписать всего 10 строк кода.

    При одиночных запросах разницы нет, но когда идет одновременный запрос 5-10 медиа-файлов, то поведение TelegramRSS стало лучше. «Долгие» запросы на получение медиа файлов теперь не блокируют, например, отдачу главной страницы.
  • Микросервисы на php и swoole для конвертации телеграм каналов в RSS
    0
    Спасибо! Почитал про psr7, стало понятнее!
  • Микросервисы на php и swoole для конвертации телеграм каналов в RSS
    0
    Вы для чего брали swoole? что бы демона сделать? Зачем? Для каких целей?
    Ну, как бы микроскопом можно гвозди забивать, но стоит ли?

    Я абсолютно согласен, что инструмент должен подходить под цели.

    Цель: демон на php, с которым легко наладить связь по http и который максимально легко написать, поддерживать и использовать. Почему вы считаете, что swoole не подходит для этих целей? Что подходит лучше? Roadrunner? Он точно проще?

    Документация у него не самая полная. Например, что бы отправить медиа файл в swoole достаточно двух строк:
    $response->header('Content-Type', 'image/jpeg');
    $response->sendfile('%путь к файлу%');
    

    У swoole, например, есть полный список методов для сервера и его вполне достаточно: www.swoole.co.uk/docs/modules/swoole-server-methods

    А как это сделать в roadrunner я не смог найти. В документации всего один пример. Я даже не могу сказать, может ли roadrunner менять заголовки у ответов…
  • Микросервисы на php и swoole для конвертации телеграм каналов в RSS
    +1
    Использование swoole подразумевает отсутствие блокирующих операций.

    Почему вы считаете, что подразумевает? Несомненно, это необходимое условие для того, что бы swoole мог обеспечить высокий RPS. Но меня не интересует работа при высоких RPS, меня интересует время отклика на одиночные запросы и упрощение работы с telegram api.

    Тут вспоминается анекдот:
    — А у тебя машина заводится в -25?
    — Хрен ее знает, двери не открываются!

    Нет никакого смысла в высоких RPS, ведь уже при 3 запросах в секунду телеграм заблокирует аккаунт за флуд и сервис превратится в тыкву :)

    Но с таким же успехом можно было взять RoadRunner и не париться.

    Можно было взять много чего. Если рассматривать только php, то есть еще amp. Но есть несколько факторов, из за которых я выбрал swoole:
    • он популярнее amp и roadrunner, если судить по звездам на гитхабе
    • помимо сервера у него есть много дополнительных возможностей среди которых: корутины, асинхронные операции
    • субьективное: код для запуска сервера на swoole выглядит аккуратнее

    Единственный для меня минус: нет возможности использовать на shared хостингах или на VPS c openVZ, если swoole не установлен хостером.
  • Микросервисы на php и swoole для конвертации телеграм каналов в RSS
    0
    Спасибо за отклик!

    Следует ли из этого, что по мнению автора, без Swoole нельзя создать микросервис на php? Небольшой сервис, использующий php-fpm не будет считаться «микросервисом»?

    Реализовать микросервисы можно на чем угодно. Вопрос только в удобстве использования, удобочитаемости кода, скорости разработки и простоты в поддержке. От использования нативного php для микросервиса меня отталкивают сложности в коммуникации с этим микросервисом. Swoole дает возможность использовать http/ws/tcp для коммуникации и делает приложение долгоживущим. Для этой задачи это было то, что нужно.

    Это вообще невероятно спорное утверждение, ничем не подкрепленное. На мой взгляд оно развнозначно словам «Замороженные пельмени позволяют: ускорить запросы, инкапсулировать логику [...]»

    Посмотрел список характерных свойств у микросервисной архитектуры: модульность, сгруппированность по функциям, независимость при обновлении/изменении. Конфликт тут только с утверждением «ускорить запросы». Вы правы, оно касается только моего конкретного случая и следовало бы указать это.

    В итоге по-факту вы просто описываете кейс с применением swoole для создания долгоживущего приложения на php.

    Совершенно верно, я даже добавил пометку tutotial, что бы подчеркнуть что это некая инструкция на настройке и использованию swoole в подобных ситуациях.

    При этом практически не затронута сама тема микросервисов и построения соотв. архитектуры.

    Буду признателен за пояснение или какие либо примеры.
  • Парсинг telegram каналов для агрегатора контента на PHP
    0
    Привет всем, кто использует мой тестовый парсер телеграм.

    Я запустил вторую версию сервиса по конвертации телеграм в RSS. Стабильнее, с полностью валидным RSS и полной поддержкой медиафайлов!

    Просьба перейти на использование нового парсера: tg.i-c-a.su

    http://proxy.i-c-a.su:9503 будет отключен через 1-2 месяца.
  • Парсинг telegram каналов для агрегатора контента на PHP
    0
    Ссылки раньше были включены по умолчанию, но с ними возникали проблемы: если t.me переставал отвечать на запросы (soft ban), то скрипт падал целиком.

    Я нашел место, где у меня был необрабатываемый exception, но по умолчанию изображения убрал.

    Можете включить, добавив параметр `&images=1`:
    http://proxy.i-c-a.su/?url=breakingmash&images=1
  • Парсинг telegram каналов для агрегатора контента на PHP
    0
    Думал, что кто-то другой сможет ответить на ваш вопрос, но видимо никто не знает, что такое скриптинг, как и я. Можете пояснить?
  • Парсинг telegram каналов для агрегатора контента на PHP
    0
    К сожалению нет. Но всеравно потребуется настройка своих ключей. Просто скачать готовый файл и залить на сервер не выйдет.
  • Парсинг telegram каналов для агрегатора контента на PHP
    0
    Спасибо за отклик!

    Проверил feedly, возможно он с портами не дружит… Попробую сделать переадресацию этого порта на какой нибудь url.

    Персональную ссылку без портов он, вроде, корректно принимает.

    Ссылка на персональный rss находится в самом низу страницы «Источники».
  • Парсинг telegram каналов для агрегатора контента на PHP
    0
    Совершенно верно, api дают только с боем. Парсю json из вэб версии :)
  • Парсинг telegram каналов для агрегатора контента на PHP
    0
    Конкуренция это круто, может какие идеи свежие подчерпну :) У меня сейчас поддерживаются почти все популярные соц сети и экспорт в rss недавно сделал. Но в процессе эксплуатации выявились некоторые шероховатости, надо над архитектурой поработать.
  • Парсинг telegram каналов для агрегатора контента на PHP
    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), но пока не получается время выкроить :(
  • Парсинг telegram каналов для агрегатора контента на PHP
    0
    Сервисов, что бы читать телеграм каналы где то кроме телеграма вообще почти нет, поэтому я пост и запилил.

    Я видел какой то сервис, где сами владельцы телеграм каналов должны их отправлять на модерацию и потом их канал автоматически конвертируется в блог.

    У меня в агрегаторе вывода rss к сожалению нет, я сделал просто ленту новостей из всех выбранных источников, включая любые телеграм каналы. Тоесть по сути у меня онлайн rss читалка, но с большим выбором дополнительных источников данных.
  • Парсинг telegram каналов для агрегатора контента на PHP
    0
    Мне кажется, что эти правила вообще не касаются парсеров.

    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).
  • Парсинг telegram каналов для агрегатора контента на PHP
    –1
    Хм, интересно! Но что то по php примеров нет, и ответы на github не воодушевляют…

    image

    Вообще мне с телеграмом работать было очень сложно. Особенно если сравнивать с vk api… Надеюсь что, в будущем, с ростом популярности, они упростят жизнь сторонних разработчиков, но пока что-то все СЛОЖНА, на мой взгляд.

  • Парсинг telegram каналов для агрегатора контента на PHP
    0
    Это же общедоступная информация, которую можно получить просто из браузера даже без аккаунта в телеграме (в статье есть пример ссылки на пост из mash). Это не личная переписка. Так что, думаю, что никакой конфиденциальности я не нарушаю. Да и пользователей пока человек 20-30 от силы, так что проект слишком маленький для разбирательств :)
  • Парсинг telegram каналов для агрегатора контента на PHP
    +1
    Спасибо за комментарий. Сарказм уважаю, но согласен не со всеми замечаниями :)

    Ликование у меня уместно, потому что 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…