• Главная
  • Контакты
Подписаться:
  • Twitter
  • Facebook
  • RSS
  • VK
  • PushAll
logo

logo

  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • За год
    • Положительные
    • Отрицательные
  • Сортировка
    • По дате (возр)
    • По дате (убыв)
    • По рейтингу (возр)
    • По рейтингу (убыв)
    • По комментам (возр)
    • По комментам (убыв)
    • По просмотрам (возр)
    • По просмотрам (убыв)
Главная
  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • Главная
  • Публикация постов Вконтакте через Trello

Публикация постов Вконтакте через Trello +22

24.04.2017 07:15
sgaynetdinov 9 5300 Источник
Вконтакте API*, Python*

Предположим есть группа в Вконтакте о кино, в которой публикуются анонсы новых фильмов и ещё какая-нибудь информация. Необходимо заранее подготавливать посты и публиковать по расписанию. Для этого я собираюсь использовать доску Trello, где хранятся посты и Вконтакте API чтобы публиковать эти посты в группе.


image


Создадим доску в Trello с названием "Кино", а в ней два листа "Новинки недели" и "Скоро в прокате". Добавим туда 4 карточки, 2 с публикацией на сегодня, 1 на завтра и 1 без даты.


Для работы с Trello API и Вконтакте API нам понадобятся следующие библиотеки.


$ pip3 install py-trello
$ pip3 install py-vkontakte

Доступ к Trello API


KEY и TOKEN получаем тут https://trello.com/app-key


import trello
client = trello.TrelloClient(api_key=KEY, token=TOKEN)
board = client.get_board(ID)  # например https://trello.com/b/nC8QJJoZ/, где ID — nC8QJJoZ

С помощью "Due Date" в карточке Trello мы задаём, время когда нужно опубликовать в Вконтакте.


def is_card_can_published(trello_card):
    if not trello_card.due_date:
        return False

    now_unixtime = datetime.datetime.utcnow().replace(tzinfo=None).timestamp()
    card_due_unixtime = trello_card.due_date.replace(tzinfo=None).timestamp()

    delta = card_due_unixtime - now_unixtime
    return True if delta <= 0 else False

card_items = (card for card in board.open_cards() if is_card_can_published(card))

Расписание публикаций можно посмотреть с помощью внутреннего календаря Trello.


image


К карточке можно прикрепить любой файл, поэтому предварительно проверяем расширение у файла. Функция get_attachment_in_card возвращает кортеж "имя файла" и "байтовую строку изображения", который используются, для загрузки в ВК.


import os
import requests

def is_image_file(attachment_url):
    _, file_extension = os.path.splitext(attachment_url)

    if file_extension not in ('.jpg', '.gif', '.png'):
        return False

    return True

def download_attachment(attachment_url):
    response = requests.get(attachment_url, stream=True)
    return response.content

def get_attachment_in_card(card):
    for attachment in card.get_attachments():
        if not is_image_file(attachment.url):
            continue

        binary_content = download_attachment(attachment.url)
        _, filename = os.path.split(attachment.url)
        yield (filename, binary_content)

Доступ к Вконтакте API


  1. Создаём Standalone-приложение https://vk.com/editapp?act=create
  2. В настройках приложения нам понадобятся "ID_приложения" и "Защищённый_ключ"

https://vk.com/dev/authcode_flow_user


>>> import vk
>>> vk.create_url_get_code("ID_приложение", 'https://oauth.vk.com/blank.html', scope='wall, photos')  # ссылка для получения CODE
>>> vk.create_access_token("ID_приложение", "Защищённый_ключ", "https://oauth.vk.com/blank.html", "CODE")  # возвращает ACCESS_TOKEN

Получаем группу ВК через py-vkontakte


import vk
vk.set_access_token(ACCESS_TOKEN)
group = vk.get_group(ID)  # vk.com/apiclub, где ID — apiclub или vk.com/club1, где ID — 1

Используем нашу функцию "get_attachment_in_card" для получения изображения из карточки Trello. Загружаем изображения в ВК и создаем публикацию в группе. После публикации поста в Вконтакте, "due date" помечаем как выполненное.


from vk.photos import Photo

for card in card_items:
    attachment_items =         {filename: binary_content for filename, binary_content in get_attachment_in_card(card)}
    photo_items = Photo.upload_wall_photos_for_group(group.id, attachment_items.items())
    group.wall_post(message=card.name + '\n' + card.description, attachments=photo_items)
    card.set_due_complete()

> GitHub

Поделиться с друзьями
-->

Комментарии (9)


  1. saluev
    24.04.2017 11:39
    #10188254
    +1

    Не планируете оформить это как power-up?


    1. sgaynetdinov
      24.04.2017 15:48
      #10188774

      Не думал, я можете кейс работы с power-up описать?


      1. thatside
        24.04.2017 18:58
        #10189060

        Собственно, Ваш сценарий использования, только в более «готовом к применению» виде. Установить powerup, добавить несколько различных настроек по типу выбора колонок, возможно, чего-либо еще, дать возможность указать группу, в которую постить — и все, плюсик в карму получен :)


  1. Bellicus
    24.04.2017 16:36
    #10188864

    А что не так с отложенной публикацией?


    1. lAfftaRl
      24.04.2017 18:58
      #10189058

      Легче составлять расписание с помощью трелло


  1. GriNAME
    24.04.2017 21:34
    #10189266
    +2

    А не подскажете как публиковать посты в канал телеграмма с помощью трелло?


    1. sgaynetdinov
      25.04.2017 08:55
      #10189654
      +1

      Используйте Telegram API и Trello API


  1. t0rr
    25.04.2017 14:26
    #10190312

    Если у кого-то вылетает Access Denied, то знайте:

    Для новых приложений ВКонтакте закрыл доступ к wallpost и открывает его только по запросу в поддержку.

    Агент службы поддержки:

    Здравствуйте,

    доступ к использованию wall.post с сервера мы предоставляем только в очень редких случаях, когда речь идёт о крупных специализированных сервисах автопостинга.

    Вы можете использовать wall.post с окном подтверждения (vk.com/dev/api_confirm)

    Команда ВК.



    1. sgaynetdinov
      25.04.2017 19:09
      #10190868

      Этот метод можно вызвать с ключом доступа пользователя, полученным в Standalone-приложении через Implicit Flow, или с использованием окна подтверждения. Требуются права доступа: wall.
      https://vk.com/dev/wall.post


      Приложения я создал 15 апреля.

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

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

МЕТКИ

  • Хабы
  • Теги

Python

Вконтакте API

python3

trello

vkontakte api

СЕРВИСЫ
  • logo

    CloudLogs.ru - Облачное логирование

    • Храните логи вашего сервиса или приложения в облаке. Удобно просматривайте и анализируйте их.
Все публикации автора
  • Публикация постов Вконтакте через Trello +22

    • 24.04.2017 07:15

Подписка


ЛУЧШЕЕ

  • Сегодня
  • Вчера
  • Позавчера
08:00

Будет ли self-hosted LLM производительнее, чем модель во внешнем контуре: сравниваем GLM, Claude и GPT +20

04:02

Помешательство вокруг ИИ парализовало принятие решений +17

07:01

Космические компьютеры +15

07:04

Rust прячет инструменты там, где вы их не ищете. Часть 3 +14

08:00

Когда подписи недостаточно: как мы расчищали «серую зону» в Поиске по картинкам +12

05:12

Kotlin? Swift? Flutter? Нет, кириллица: пишем production-приложение с картой и push-ами на 1С: Элемент +12

05:00

Ваш UI-фреймворк уже написан. Используем возможности Playwright +12

09:01

ЕГЭ по математике: как за 10 лет результаты ЕГЭ выросли на 20 баллов. Магия чисел или бум образования? +11

06:30

Проекты Node.js. Создание реальных веб-приложений и API для бэкенда +11

06:53

Делаем видео-диски для Sega CD / Mega CD: промежуточный результаты и просьба о помощи +8

08:05

Размытая граница между состояниями CSS и событиями JavaScript +7

07:08

Как родословная влияет на инновации +7

09:50

Семья математиков за 20 лет решила важнейшую задачу теории групп +6

09:00

Написал расширение, которое качает статьи Хабра в Markdown — и не долбит сервер +6

08:00

Битрикс24 + Python: шесть функций, после которых REST становится проще +6

07:18

Недельный геймдев: #290 — 9 августа, 2026 +6

05:59

Joomla-дайджест. 2-й квартал 2026 года +6

08:19

Как мы научились не тратить деньги на ненужные ИИ-проекты: 4 ошибки и 1 система, которая их исправляет +5

07:30

Собрать базу знаний для ИПР системных аналитиков не сложнее, чем кажется +5

06:30

ИИ в бизнесе: почему большинство проектов не доходят до результата и что с этим делать +5

13:01

ЭВМ в народном хозяйстве: железная дорога, «Сирена» Аэрофлота, с/х и стройка +55

07:27

99% трафика моего веб‑сайта составляют боты +53

13:10

LLM не научились врать. Они научились говорить +47

09:01

Я просто хотел часы, которые не нужно подводить. Всё закончилось Pi Zero и LLM +40

08:00

Почему фонарик в окне работает как процессор +37

10:20

Свет как линейка +25

09:46

Возникает ли реальность благодаря нашим наблюдениям? +20

15:43

Тест локальных MOE моделей +18

15:30

Вне карьерного шаблона: почему я вернулась из руководства в системную аналитику +17

14:05

Starship Troopers 2005 vs Ultimate Bug War: разбор двух главных шутеров по культовой франшизе +15

09:00

Способны ли мы породить сознание искусственно? +13

14:07

Как я за четыре дня сделал кооперативную 3D‑игру с нейросетями: ChatGPT рисовал, Tripo лепил, Claude писала код +10

09:52

Огонь, вода и медные сети: почему операторы по всему миру никак не откажутся от медных коммуникаций +9

18:21

Как продлевали Chat Control 1.0 +8

14:56

Почему я не использую EvaProject, импортозамещение Jira +8

14:37

Прокачаться в бизнес-аналитике: блоги и инструкции в стиле «бери и делай» + профильные учебники с теоретической базой +8

12:21

Разделение ответственности между Claude и Codex: как я перестал выбирать одну нейросеть и усилил сразу две +8

22:18

Покажи мне свой харнесс — и я спрошу у Клода, кто ты +7

21:09

Спросите Итана: Стоит ли нам перестать беспокоиться о распаде вакуума? +7

10:42

Крестики-нолики. Самообучение с подкреплением +7

08:00

Что видит DPI, и что мы попробовали у него отобрать +96

09:01

Как изобрели письменность? Часть 4. Крит, галеры, два письма: о непростой истории греческих алфавитов +61

14:05

Тайна 3dfx Voodoo: изучаем архитектуру GPU из 90-х «по винтикам» +46

07:05

Они все испортили. Как Nintendo Switch и Steam Deck убили индустрию портативных консолей, и всем с этим нормально +46

13:01

Fender Player Plus Meteora HH из солнечной Мексики +42

09:00

В ДНК человека нашли «память» о предках, которых мы не знаем +34

15:12

Размышление: куда прилетят разработчики «на автопилоте»? +32

06:36

Теорема Миттаг-Леффлера: главная теорема всего комплексного анализа +24

08:00

RCE-уязвимость в ИИ-редакторах кода угрожала 50 млн разработчиков. Разбираемся, что произошло +19

10:46

Музей Кронпринц +18

10:00

Лопнет ли пузырь на рынке ИИ? Разбираем потери, долги и производительность +17

09:18

Пишем терабайты видео на диск в Go и не даем ОС сожрать всю память +17

07:59

Голосовой ввод в любое окно Windows за секунду. Офлайн, на CPU, без единого гигабайта torch +17

07:27

Почему EtherCAT в LinuxCNC держится на компоненте из 9 коммитов +17

07:50

Я печатаю медленнее, чем думаю: локальная диктовка на Whisper для Windows, телефона и Telegram +16

21:05

Не позволим теории струн разрушить вполне успешную науку — физическую космологию +15

16:31

Chrome скачавает 4 Гб локальной Gemini Nano: нужно ли, и как отключить +15

14:44

Штыревая антенна в КВ диапазоне: расчет, согласование, шумы +15

09:32

Драгоценный камень в сердце квантовой физики +15

09:07

Что я узнала, когда выгрузила весь реестр российского ПО и проанализировала все 32 тысячи записей +15

ОБСУЖДАЕМОЕ

  • Размышление: куда прилетят разработчики «на автопилоте»? +32

    • 76   12000

    Что видит DPI, и что мы попробовали у него отобрать +96

    • 60   77000

    99% трафика моего веб‑сайта составляют боты +53

    • 48   50000

    Сначала умрёт интерфейс: что ИИ-агенты сделают с 1С и учётными системами +6

    • 47   11000

    Как я настроил безопасное шифрование данных для сайта с помощью протокола HTTPS и SSL/TLS сертификата -22

    • 42   12000

    Chrome скачавает 4 Гб локальной Gemini Nano: нужно ли, и как отключить +15

    • 38   15000

    Как вас обманывают биржи: большинство трейдеров думают, что торгуют на рынке -1

    • 37   12000

    Возникает ли реальность благодаря нашим наблюдениям? +20

    • 33   11000

    Они все испортили. Как Nintendo Switch и Steam Deck убили индустрию портативных консолей, и всем с этим нормально +46

    • 30   10000

    Пишем терабайты видео на диск в Go и не даем ОС сожрать всю память +17

    • 28   62000

    Математический парадокс Илона Маска +6

    • 27   10000

    Что я узнала, когда выгрузила весь реестр российского ПО и проанализировала все 32 тысячи записей +15

    • 26   13000

    LLM не научились врать. Они научились говорить +42

    • 25   13000

    Развитие людей от HR: как не надо, но очень хочется (Степан, руководитель) +10

    • 24   8400

    Лопнет ли пузырь на рынке ИИ? Разбираем потери, долги и производительность +17

    • 23   64000
  • Главная
  • Контакты
© 2026. Все публикации принадлежат авторам.