Почему греется макбук. Macbook греется и шумит. Возможные неисправности и стоимость решения

Эта статья для тех, кто уже подсел на мессенджер Telegram и десятки раз в день проверяет его.

Число фанатов мессенджера растет с каждым днем. Ведь Telegram предназначен не только для общения, главные фишки Telegram - каналы с интересными новостями и полезные боты. О самом крутом из них и поговорим.

Речь пойдет о боте IFTTT. С его помощью можно передавать в Telegram каналы/группы информацию из сотен различных веб-сервисов, а также управлять ими с помощью команд, отправляемых боту. Разберем подробно, что стоит за этими словами.

Что такое IFTTT?

IFTTT – это веб-сервис, который позволяет связать между собой почти четыре сотни других веб-сервисов. С его помощью можно сделать так, чтобы в случае какого-либо события в одном сервисе, автоматически будет выполняться действие в другом.

Примеры:

  • ЕСЛИ опубликовано новое фото в Instagram, ТО сохранить его в Dropbox;
  • ЕСЛИ пришло новое письмо c отметкой «важное» на почту ТО изменить цвет лампочек в спальне;
  • ЕСЛИ не пройдена дневная норма шагов в Fitbit ТО отправить напоминание в iOS.

Подобные правила называются апплеты (ранее назывались «рецепты»). На сайте IFTTT можно выбрать среди десятков тысяч готовых апплетов или создать свой.

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

А теперь вернемся к теме статьи и посмотрим, чем может быть полезен IFTTT для пользователей Telegram.

Способ применения #1. Объединяем соцсети и Telegram

IFTTT-бот может автоматически публиковать новые посты из ваших профилей в соцсетях (в том числе Facebook, Foursquare, Instagram, Pinterest, Linkedln, Twitter) в Telegram-канал или группу. А можно, наоборот, репостить в соцсети сообщения из Telegram-канала.

Способ применения #2. Собираем собственный новостной канал

С помощью IFTTT можно транслировать в свой канал информацию из разных источников: служба прогнозов погоды, Wikipedia, New York Times, Apple App Store, Github, Medium и множества других.

Способ применения #3. Эффективнее организуем свою работу

IFTTT-бот позволяет организовать в Telegram-канале систему напоминаний о письмах и делах. А также обращаться к разнообразным сервисам для управления временем (например Rescue Time или Todoist), не выходя из Telegram.

Способ применения #4. Соединяем Telegram и умный дом

К IFTTT подключены самые разные виды «техники будущего»: лампочки, термостаты, выключатели, кондиционеры, автоматические двери, коробочки для яиц, кофеварки, посудомоечные машины и десятки других вещей. А также автомобили BMW и Tesla. Можно получать в Telegram сообщения от своей стиральной машины, а можно, наоборот, отправлять ей приказы с помощью IFTTT-бота.

Способ применения #5. Сообщаем семье о своем местоположении

IFTTT может следить за вашим местоположением, если установить их приложение на смартфон или использовать GPS-трекер для животных Whistle.

Способ применения #6. Подключаем к Telegram свой смартфон

IFTTT-бот позволяет отправлять в Telegram новые фотографии с камеры смартфона, данные о местоположении, новые напоминания, события в календаре и т.д.

Способ применения #7. Архивируем посты из Telegram

Фотографии, видео, музыку и сообщения из Telegram каналов/групп можно автоматически сохранять в облачных хранилищах.

А теперь разберем, как реализовать все описанные выше возможности в своем Telegram. Для выполнения инструкций ниже вам необходимо зарегистрироваться на сайте IFTTT .

Как подключить IFTTT к каналу/группе Telegram?

1. Заходим на сайт IFTTT в раздел Telegram и нажимаем Connect для установки бота IFTTT. Соглашаемся на предложение браузера перейти в Telegram.
2. Не забываем нажать на Start .
3. Вводим команду /connect_channel .
4. Добавляем бота IFTTT в администраторы канала/группы.
5. Отправляем боту IFTTT сообщение с именем канала/группы. В моем случае - @ifttt_test.

Как настроить IFTTT-апплет?

Теперь к каналу можно подключать апплеты. Рассмотрим как это происходит на примере апплета для трансляции постов из RSS-ленты в Telegram-канал.

1. Открываем бот IFTTT и нажимаем на кнопку Authorize IFTTT .
2. В результате откроется страница для выбора апплетов. Выбираем Send new Feed Items to a Telegram chat .
3. Заходим на страницу апплета и передвигаем вправо ползунок над надписью Turn on.
4. Вставляем ссылку на RSS-ленту (например, http://feeds.feedburner.com/сайт) и выбираем из списка один из подключенных каналов или группу.
6. Теперь активированный апплет отображается сверху остальных апплетов на странице Telegram на сайте IFTTT. Его можно включать и отключать по желанию.
7. Дожидаемся когда в ленте появляется новый пост и радуемся его появлению в канале Telegram.

30 октября 2015 в 07:46

Создание канала с автопостингом в Телеграме без единой строчки кода

  • API ,
  • Системы обмена сообщениями
  • Tutorial

Вступление

Предупреждаю сразу: технического в статье очень мало. Это практически пошаговая инструкция для не очень сведующих в техническом плане пользователей . Для людей сведущих (и тех, кому лень читать много текста), приведу две ссылки: Telegram Bots API + IFTTT Maker Channel .

Теперь подробнее. Думаю, все слышали про мессенджер Telegram . Вероятно, многие даже знают про нехитрый API для создания ботов в этом мессенджере. Кроме того, не так давно в T появилась возможность создавать так называемые «каналы» (channels), упрощающие мгновенную рассылку сообщений практически любому количеству подписавшихся на канал лиц. Наконец, самая свежая новость: ботов стало можно добавлять в качестве администраторов в каналы , то есть такие рассылки стало можно делать автоматизированно.

Думаю, не надо объяснять, что это открывает довольно широкие возможности для различных сервисов. Например, у меня довольно быстро получилось сделать следующее:

  • три канала (@RedditTop , @r_pics , @gone_wild - осторожно, последний с «взрослым» контентом), которые ежечасно импортируют топовые посты с Реддита (и двух его сабреддитов);
  • ещё канал , делающий то же с постами с 9GAG;
  • и, наконец, завел хитрого бота @JamesBot , который анонимно пересылает все сообщения, написанные ему, в общий канал (@secret_ru , @secret_en , @secret_es , @secret_ar или @secret_fa - в зависимости от языка). Получился анонимный чат средней степени трэшовости.
Уже после создания всех этих ботов и каналов мне пришло в голову, что простейший автоимпорт постов откуда-то «снаружи» можно наладить вообще без всякого кода и хостинга - буквально минут за 5. На помощь нам придет прекрасный сервис IFTTT - If This Then That, имеющий множество интеграций с социальными сетями и прочими сервисами. Правда, к сожалению, прямой интеграции с Телеграмом у него (пока?) нет - зато есть т.н. IFTTT Maker Channel , позволяющий делать простые HTTP(S)-запросы при срабатывании триггера. К сожалению, мы не сможем принимать сообщения, отправленные боту (входящие запросы IFTTT Maker принимать может, но, увы, только в строго определенном формате) - интерактива не выйдет. Зато сможем по срабатывании любого события (например, новый твит или пост в FB):
  • публиковать сообщение в канале,
  • отправлять сообщение в заранее выбранный чат (куда добавлен наш бот),
  • отправлять сообщение заранее указанному пользователю (который добавил себе бота).
Правда, срабатывать триггер будет примерно раз в 15 минут. И пока не нашлось способа загружать изображения/видео/документы (можно только кидать линк на них). Да, ограничения жесткие. Но для простейших оповещений - пойдет. Итак, поехали.

Шаг 1. Создаем бота.

По вопросу создания бота нужно обратиться к самому главному боту: @BotFather . У вас спросят две вещи: имя, которое будет отображаться в списке диалогов, а также юзернейм , по которому вашего бота можно будет найти (он должен быть уникален). Если цель - публикация постов в канале, ни то, ни другое, особого значения не имеют (видеть своего бота-администратора будете только вы).

После получения ответов на эти два вопроса BotFather должен выдать вам token вашего бота. Он имеет следующий вид:
123456789:Blablabla...

Сообщение с токеном терять не стоит, а сам токен - не стоит разглашать кому-либо, так как токен позволяет кому угодно представляться вашим ботом.

Шаг 2. Создаем канал.

Создание канала - шаг опциональный. Если хотите, можете отправлять сообщения в чат или пользователю (правда, придется сначала узнать их id - об этом ниже).

В своем клиенте Телеграма выбираем создание нового сообщения - New Channel (кажется, все официальные клиенты сейчас поддерживают это). Указываем название, описание и фото по вкусу. Канал должен быть публичным, поэтому указываем тип Public и задаем адрес («юзернейм») теперь уже для канала. Этап приглашения друзей можно пропустить.

Когда канал создан, заходим в его настройки, открываем список администраторов и добавляем созданного на первом шаге бота (поиском по его юзернейму).

Шаг 3. Настраиваем интеграцию на IFTTT.

Отправляемся на IFTTT . Регистрируемся, если еще не. IFTTT позволяет создать множество триггеров вида «импортировать откуда», «при каком условии», «экспортировать куда». Они называются «рецептами». Создаем новый рецепт: Create a recipe .

Сначала нужно выбрать источник и конкретное условие (триггер), по которому должен срабатывать рецепт. Тут вы ничем не ограничены: хотите - следите за твитами по хэштегу, хотите - переносите свои посты из фэйсбука. Не буду вдаваться в детали, всё довольно просто.

Последняя часть рецепта - «that» - выбрать, что нужно делать, если сработало условие. Тут нужно ввести в поиск Maker , выбрать его, а затем единственное доступное действие - Make a web request . Наконец - самый ответственный этап, заполнение полей:

  • URL: api.telegram.org/bot /sendMessage
  • Method: POST
  • Content type: application/json
  • Body: {"chat_id":"@ ","text":"{{Text}}"}
(примечание: method и content type можно выбрать и другими - Телеграм в этом плане относительно всеяден)

Обратите внимание: вместо и URL нужно указать токен вашего бота (см. шаг 1), вместо в Body - адрес канала (шаг 2). Без угловых скобок, конечно, но перед адресом канала должен стоять символ @ . {{Text}} в поле Body означает подстановку текста, полученного из опубликованной записи. Конкретный код подстановки может быть и другой, они зависят от выбранного триггера, чтобы увидеть их список (и подставить их в текст сообщения), нажмите на кнопку с колбой рядом с полем Body. Конечно, можно вообще не делать подстановок, а публиковать один и тот же текст, но это быстро надоедает подписчикам:)

Уточнение: если вы хотите отправлять сообщение не в канал, а в чат или конкретному человеку (себе, например), то вместо "@ " нужно указать идентификатор чата или этого человека. Чтобы его узнать, проще всего добавить себе, к примеру,

Развился с 1 000 подписчиков до 8 000. С тех пор я понял, какие ошибки я допустил на первых этапах продвижения своего канала и как их избежать новичкам. Многие из начинающих авторов в Telegram спрашивают, что я могу посоветовать. Поэтому я решил обновить свою старую статью и сделать советы более актуальными и правильными.

Это обновление статьи от октября 2016 года

Что публиковать?

В Telegram, как и в любой другой социальной сети, в первую очередь, важно то, о чём вы пишите. Стоит учесть один важный момент. Здесь люди не хотят читать репосты, копипасты и другие виды контента, который есть у всех. Подписчики выбирают каналы, где есть авторское мнение, уникальный взгляд на популярную новость или нишевые тематики. Впрочем, тематика может быть популярной, но писать всё-таки стоит о своём.

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

Когда лучше всего публиковать в Telegram

Выбрать правильное время публикации для поста - основная из задач в любой социальной сети. Мне кажется, что для Телеграм это не имеет значения и на это есть несколько причин:

  1. У ваших подписчиков разный часовой пояс. Хотите опубликовать пост в три часа ночи? Пожалуйста.
  2. У некоторых подписчиков для вашего канала отключен звук оповещений.
  3. У подписчиков и так целая тьма каналов.

Из этих трёх пунктов можно сделать один простой вывод. Telegram - это как RSS-лента. Ваш пост прочтут тогда, когда это будет удобно подписчику. Поэтому не стоит публиковать слишком много информации за день. «Простыню» из 10500 постов никто не будет читать. Чего я лично не делаю. И на данный момент думаю над решением проблемы - чтобы лента обновлялась часто, но подписчики не страдали от количества постов.

Большинство русскоязычных пользователей Телеграм - это Москва и Питер. Поэтому если вы хотите выбрать наиболее оптимальное время, то выбирайте московское.

Есть ещё одна хитрость. Посты можно отправлять без оповещения пользователей. Для этого достаточно переключить иконку-«колокольчик» и сообщение отправится в канал без оповещений.

Отложенный постинг

Чтобы ещё меньше в течение дня думать о наполнении контентом канала, воспользуйтесь инструментами для планирования постов. Например, KUKU .

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

Как форматировать посты

Сам мессенджер не поддерживает никакого форматирования. Ссылки выглядят как http://ссылки , жирный текст как жирный, и прочее. Здесь на помощь приходят такие боты, как @markdownrobot. При помощи этого бота можно форматировать ваши посты в Markdown разметке.

При хорошем умении обращаться с ботами можно создавать посты с практически любым оформлением. Например, в канале-агрегаторе различных товаров с Aliexpress @aliexpressall к постам добавляют кнопки:

Здесь важно помнить, что не все Telegram клиенты поддерживают подобную разметку. Поэтому некоторые подписчики могут вообще не увидеть сообщения. Кроме этого, к постам можно добавлять голосовалки, лайки, опросы и многое другое.

Как вести статистику канала

Для ведения статистики канала опять же был изобретён полезный бот @ControllerBot . После подключения к вашему каналу вы сможете у него запросить статистику за последний месяц. Бот в ответ вам предоставит текстовые данные и красивый график роста.

Взаимный пиар

Как я писал в самом начале, в Телеграме сложно выйти на свою аудиторию. Поэтому одним из инструментов для нахождения двух «одиноких сердец» будет взаимный пиар. Найдите схожие по тематике каналы, желательно с таким же количеством читателей, как и у вас. После чего смело пишите админам с предложением о взаимном пиаре. Многие с радостью соглашаются.

Как же выглядит такой пиар? Вы в своём канале публикуете пост с рекламой чужого канала. Админ в ответ опубликует вашу рекламу. Стоит помнить, что нельзя переусердствовать с такими постами. Иначе все существующие читатели убегут от спама. Я публикую один рекламный пост в день.

Основные моменты, которые нужно знать:

  • ВП - взаимный пиар;
  • «Мега» - очень похоже на ВП. В этом случае все каналы, желающие поучаствовать, собираются в общий список, и реклама идёт одновременно во всех;
  • Час или другое время в топе - после публикации рекламного поста должен пройти как минимум час перед следующей публикацией;
  • 24 часа в ленте - рекламный пост не удаляется из ленты в течение суток. Да, рекламный пост можно будет удалить.
  • Просмотры. Некоторые админы оставляют пост до тех пор, пока он не наберёт нужное количество просмотров.

Заранее подготовьте краткое описание канала, картинку и приватную ссылку. При переходе по такой ссылке посетитель автоматически становится подписчиком. Получить ссылку можно в настройках канала > выставьте тип канала на «Private». После чего вы получите приватную ссылку. Не забудьте поменять обратно статус канала на «публичный».

Важно сразу начать отслеживать конверсию от ВП и рекламы для своего канала. Делать это будет сложно из-за недостатка инструментов для сбора и анализа статистики. Но сделать это нужно, и чем раньше, тем лучше. Так вы сразу будете знать, с какими каналами нужно сотрудничать в будущем.

Я для этого использую таблицу в Google Документах:

Каталоги каналов

Каталоги каналов - ещё один отличный способ заявить о себе. Он частично похож на взаимный пиар. Потому что вас, скорее всего, попросят опубликовать рекламу каталога у себя. Кто-то опубликует ваш канал за деньги, а кто-то «за спасибо». В любом случае попасть в каталог гораздо проще, чем договориться о взаимном пиаре. Каталогов в Телеграме тьма-тьмущая и найти их не составляет труда.

Вот, например, список полезных каталогов от @tginfo , с которых стоит начать свой поиск:

  • @CatalogTelegram - структуризированный каталог чатов, каналов и ботов.
  • tgchans.com - каталог каналов с расширенной статистикой и отслеживанием репостов.
  • inten.to - индексация чатов, каналов и ботов в режиме реального времени.
  • tlgrm.ru/channels - сайт с каналами, отсортированными по рубрикам.
  • tchannels.me - старейший каталог каналов.
  • telegram-club.ru - чаты, каналы и боты.
  • tlgrm.pro - чаты, каналы и боты.
  • storegram.ru - боты и каналы с рейтингом.
  • tgcreator.ru - рейтинг каналов и ботов.
  • uztelegram.com - каналы Узбекистана.

Если вы хотите раскрутить своего бота, то вам понадобятся каталоги ботов:

  • @Obzorchik - боты каждый день, а также сайты с ботами;

Конечно, не забыли про каталоги групп. Например, @groupsguide и combot.org/telegram/top/chats , где собраны самые популярные группы по статистике @comstatbot .

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

Кроме каталогов, есть и авторские каналы, направленные на публикацию всего, что связано с Телеграмом. При помощи таких каналов тоже можно «достучаться» до своей аудитории. Например, в канале Твой Telegram публикуются новости о мессенджере и советы по его использованию. Поэтому реклама в таком канале будет интересна его подписчикам. Они изначально пришли сюда за поиском интересных каналов и новостей о Telegram.

Главное, учитывайте аудиторию каналов, с которыми планируете сотрудничество.

Покупка подписчиков

Самый затратный, но и самый простой вариант привлечения читателей - это «загнать» их за деньги. В Telegram есть люди, которые с радостью привлекут живых подписчиков к вам в канал за деньги. Обычно это несколько рублей за «голову».

Заказать такой тип продвижения можно у некоторых администраторов каталогов. Начать стоит с @User_Administration , который поможет разнести весть о вас более чем в 30-ти каналах Telegram. При этом радиус охвата будет иметь разностороннюю направленность и затронет большую часть аудитории.

Расскажите о себе в других социальных сетях

Основное место локации моих постов - это мой блог. Потом идут социальные сети и почтовая рассылка. У вас наверняка так же. Поэтому не пренебрегайте вашими читателями в Twitter или на сайте. Расскажите о своём канале у себя в социальных группах и люди к вам потянуться.

Напоследок

Я рассказал лишь об основных хитростях продвижения канала в Telegram. Благодаря им я без труда могу удержать существующую аудиторию своего канала и привлекать новых подписчиков.

Не стоит останавливаться лишь на этих советах. Всегда ищите новые техники привлечения подписчиков. Чтобы оставаться «в теме» маркетинга в Телеграм, да и в других сетях, я подписался на несколько каналов.

Мессенджер Телеграмм имеет большую функциональность, которая не заканчивается отправкой сообщений от пользователя к пользователю. Расширяют возможности приложения, в том числе, боты, которые могут автоматизировать те или иные функции. Боты могут быть как крайне простые, так и сложные и многофункциональные. В рамках данной статьи рассмотрим, как создать бота в Телеграмм.

Оглавление:

Что такое боты в Телеграмм

Бот для Телеграмм – это автоматизированная программа, внедренная непосредственно в канал, группу или чат мессенджера. Бот может выполнять самые разные функции, например:

  • Рассылать анонсы статей с сайта после их публикации;
  • Собирать заказы;
  • Предоставлять информацию, которая в нем заложена, например, отвечать на некоторые вопросы.

Функциональность ботов в Телеграмм обширна, и с каждым годом они становятся все более «умными». Например, через некоторых ботов можно заказать еду, вызвать такси, узнать как пройти к тому или иному месту, получить консультацию по определенном вопросу и так далее. При этом боты работают мгновенно, то есть, отправив им сообщение, вы практически сразу получаете ответ, что крайне важно в ряде ситуаций.

Как создать бота в Телеграмм

Есть несколько способов создания собственного бота в Телеграмм. Первый подразумевает использование встроенных в мессенджер сервисов, которые позволяют создать простых по функциональности ботов, путем отправки команд в чат. Второй способ сложный – он подразумевает взаимодействие с API Телеграмм путем самостоятельного создания сценариев, иными словами, данный способ требует немалых познаний в программировании, но при этом можно создать функциональное решение.

Рассмотрим как создать бота в Телеграмм, используя сторонний сервис, то есть простым способом:


Все, на этом бот создан. Manybot после успешного создания бота предложит направить ссылку на него, чтобы пользователи Телеграмм могли подписаться.

Как настроить автопостинг в Телеграмм из ВКонтакте, с сайта и других сервисов

Создав бота по описанной выше инструкции, можно настроить его на автоматическую публикацию информации, которая появилась на вашем (или чужом) сайте, в группе ВКонтакте, на Youtube-канале или странице в Twitter. Настраивается бот довольно просто, для этого достаточно:


Стоит отметить, что к одному боту можно подключить кросс-постинг информации из нескольких источников. Подобным образом можно удобно сформировать для себя RSS-ленту, куда будут сыпаться сообщения с интересных вам сайтов.

Примечание: в начале 2017 года ВК начал требовать токен пользователя для вызова метода wall.get и многих других. Процесс получения токена для ВК не относится к теме учебника, следовательно, описан не будет. По ссылке https://vk.com/dev/manuals любой желающий сможет найти документацию и описание процесса получения токена.

Для начала — небольшое лирическое отступление.
Когда в Telegram появились каналы , поначалу я к ним относился как к неудачной попытке клонировать Twitter. Сразу появились тупые канальчики с тупыми картиночками, что только усугубляло положение дел. Однако сейчас, спустя больше месяца, моё мнение изменилось на диаметрально противоположное. Призванные заменить списки рассылки (ими вообще кто-то пользовался?), каналы дали возможность получать огромное количество контента, которым можно делиться, который можно сохранять.

В Bot FAQ есть интересная фраза: "Мы будем внимательно смотреть на то, как люди пользуются ботами и развивать их в том направлении". С учетом того, что многие боты занимались именно рассылкой информации, каналы - это очень логичный и правильный шаг в развитии автоматизированных средств.
С точки зрения программиста, каналы решают сразу несколько ключевых проблем:

  1. Не надо зависеть от серверов Telegram, т.к. нет входящих сообщений.
  2. Анонимная рассылка сообщений (некоторые люди просили сделать возможность отправлять свои сообщения через "безликого" бота) максимально упростилась.
  3. Не надо вести списки пользователей, которым нужно отправить информацию и внедрять паузы между отправкой сообщения по очереди всем, эту заботу берёт на себя сам Telegram.

Лично я заметил, что некоторые паблики и группы ВКонтакте стали дублировать свои записи в каналы Telegram. Сегодня мы научимся делать то же самое без помощи каких-либо конструкторов или сторонних веб-сайтов. Чтобы не сильно заморачиваться, будем постить только ссылку на пост, превью к ней и так даст необходимый минимум информации о посте.

Получаем записи

В качестве "подопытного кролика" я выбрал свою маленькую, но очень гордую группу с музыкой C:\Music . Получать новые записи будем при помощи VK API, при этом нам не нужно заморачиваться с созданием приложений, т.к. получить записи со стены можно даже без авторизации ВКонтакте (если в настройках сообщества не указано обратно)
Итак, сформируем ссылку, которая будет нам возвращать последние 10 записей от имени сообщества из группы C:\Music: https://api.vk.com/method/wall.get?domain=c.music&count=10&filter=owner&access_token=token
Что здесь что? domain - короткое имя сообщества. Если его нет, то меняем domain=xxx на owner_id=-yyy (обратите внимание на минус перед числом, это важно). count - число выводимых записей. Чем дольше пауза между проверками и чем чаще в сообществе появляются записи, тем большее число нужно выставить, но не более 100. filter=owner просит сервер выводить записи только от имени группы, полезно, если стена открыта, access_token - это токен пользователя, который «дёргает» API от имени одного из приложений. Давайте теперь создадим файл bot.py , в котором зададим основные константы и импорты:

# -*- coding: utf-8 -*- import time import eventlet import requests import logging import telebot from time import sleep # Каждый раз получаем по 10 последних записей со стены URL_VK = "https://api.vk.com/method/wall.get?domain=c.music&count=10&filter=owner&access_token=Ваш_токен_VK" FILENAME_VK = "last_known_id.txt" BASE_POST_URL = "https://vk.com/wall-39270586_" BOT_TOKEN = "токен бота, постящего в канал" CHANNEL_NAME = "@канал" bot = telebot.TeleBot(BOT_TOKEN)

Во-первых, не забудьте сделать нужного бота администратором канала, иначе фокус не удастся. Во-вторых, обратите внимание, что в импортах появилась библиотека eventlet , она поможет нам избежать проблем при получении записей из ВК. В-третьих, в указанный txt-файл будем записывать номер верхнего поста на момент проверки, я решил не заморачиваться с созданием key-value хранилищ, ради одного числа-то. В-четвёртых, в качестве параметра BASE_POST_URL указываем ссылку на любой пост из нашей группы без последнего числа.

Иногда ВК начинает дурить и не возвращает список постов за приемлемое время. В этом случае, нам нужно отвалиться по таймауту и пропустить проверку. Можно, конечно, попробовать ещё раз, но мы люди не настойчивые:)

def get_data () : timeout = eventlet.Timeout(10 ) try : feed = requests.get(URL_VK) return feed.json() except eventlet.timeout.Timeout: logging.warning("Got Timeout while retrieving VK JSON data. Cancelling..." ) return None finally : timeout.cancel()

Суть простая: получилось - возвращаем объект с постами. Не получилось - возвращаем None. Теперь перейдем непосредственно к парсингу. Алгоритм будет такой:

  1. Открываем файл, хранящий последний известный номер верхнего поста.
  2. Если метод get_data() вернул объект с записями, начинаем проходить по нему со второго элемента, т.к. первый - какое-то неизвестное мне рандомное число.
  3. Если номер поста меньше или равен последнему известному - завершаем обход.
  4. Проверяем наличие закрепленного поста. Если таковой есть, то передаем функции отправки сообщений все записи, кроме закрепленной. Иначе - просто передаем все.
  5. У каждой проверяемой записи забираем ID, подставляем рядом с BASE_POST_URL и получаем полный ID записи.
  6. Отправляем его в канал.
  7. Как только обход завершился, берем номер первой (второй, если первая - закрепленная) записи и записываем в файл поверх старого значения.
  8. Засыпаем или завершаемся.

По поводу п.8: дополнительно предусмотрим в нашей программе два режима: в первом режиме скрипт постоянно работает, засыпая после каждой итерации на 4 минуты; во втором режиме скрипт просто завершает работу, что позволяет ставить его в планировщик cron . В определении режима нам поможет константная переменная SINGLE_RUN, которую надо не забыть указать где-нибудь вверху.

def send_new_posts (items, last_id) : for item in items: if item["id" ] <= last_id: break link = "{!s}{!s}" .format(BASE_POST_URL, item["id" ]) bot.send_message(CHANNEL_NAME, link) # Спим секунду, чтобы избежать разного рода ошибок и ограничений (на всякий случай!) time.sleep(1 ) return def check_new_posts_vk () : # Пишем текущее время начала logging.info(" Started scanning for new posts" ) with open(FILENAME_VK, "rt" ) as file: last_id = int(file.read()) if last_id is None : logging.error("Could not read from storage. Skipped iteration." ) return logging.info("Last ID (VK) = {!s}" .format(last_id)) try : feed = get_data() # Если ранее случился таймаут, пропускаем итерацию. Если всё нормально - парсим посты. if feed is not None : entries = feed["response" ] try : # Если пост был закреплен, пропускаем его tmp = entries["is_pinned" ] # И запускаем отправку сообщений send_new_posts(entries, last_id) except KeyError: send_new_posts(entries, last_id) # Записываем новый last_id в файл. with open(FILENAME_VK, "wt" ) as file: try : tmp = entries["is_pinned" ] # Если первый пост - закрепленный, то сохраняем ID второго file.write(str(entries["id" ])) logging.info("New last_id (VK) is {!s}" .format((entries["id" ]))) except KeyError: file.write(str(entries["id" ])) logging.info("New last_id (VK) is {!s}" .format((entries["id" ]))) except Exception as ex: logging.error("Exception of type {!s} in check_new_post(): {!s}" .format(type(ex).__name__, str(ex))) pass logging.info(" Finished scanning" ) return

Осталось дело за малым - написать логику запуска всего процесса и инициализировать логгер, который будет писать в текстовый файлик обо всех событиях в жизни бота:

if __name__ == "__main__" : # Избавляемся от спама в логах от библиотеки requests logging.getLogger("requests" ).setLevel(logging.CRITICAL) # Настраиваем наш логгер logging.basicConfig(format="[%(asctime)s] %(filename)s:%(lineno)d %(levelname)s - %(message)s" , level=logging.INFO, filename="bot_log.log" , datefmt="%d.%m.%Y %H:%M:%S" ) if not SINGLE_RUN: while True : check_new_posts_vk() # Пауза в 4 минуты перед повторной проверкой logging.info(" Script went to sleep." ) time.sleep(60 * 4 ) else : check_new_posts_vk() logging.info(" Script exited.\n" )

Перед запуском бота, создадим вручную файл last_known_id.txt и впишем в него один из последних числовых ID, в моём случае это было чудесное число 1893. После включения бота, в зависимости от значения SINGLE_RUN, он будет либо постоянно работать, проверяя каждые 4 минуты на наличие новых постов, либо завершится после окончания первой проверки. Для себя я выбрал второй вариант, добавив скрипт в cron.

На сегодня всё, теперь вы можете легко и просто настроить автопостинг записей практически из любой группы ВК в свой канал.




Top