• Главная
  • Контакты
Подписаться:
  • 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

Подписка


ЛУЧШЕЕ

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

«Трубы» зовут — вспоминаем историю скринсейверов +19

07:05

О технологиях домашнего производства пластиковых/металлических деталей +11

07:01

Кустарные вакуумные триоды Клода Пайяра. Часть 6. Приспособления, оснастка +5

06:28

Видеть невидимое: как создаётся независимость Поднебесной в космосе +3

05:20

Моделирование резьбы для 3D печати +3

08:06

Тренд на деградацию: как я написал прокси-шакализатор на Next.js, чтобы помочь замедлить интернет +2

08:04

Прихоть или безопасность: как компаниям использовать биометрию в новых реалиях +2

08:00

Ленты коротких видео: как оптимизировать, чтобы вас смотрели больше +2

08:00

Как подключить Kafka UI к кластеру Kafka в DBaaS +2

06:50

Что нужно знать про 3D-принтеры, если вы провели 30 лет в коме +2

05:48

Реактивные серверы, или как перестать писать JavaScript и начать жить +2

05:01

Бегущий чайник +2

08:15

AI в iOS-разработке: что у меня реально закрепилось в 2026, а что я выкинул +1

08:00

АИС «Налог-3»: что на самом деле видит о вас налоговая? +1

07:38

Проблемы в работе над стилем в AI-видео – и как их решать +1

07:35

Допиливаем InferSim для собственных нужд моделирования загрузки промышленных GPU +1

07:16

Возвращение блудного программиста +1

06:16

Paging 3 хорош. Пока вам не понадобится что-то ещё +1

06:00

Ищем бесплатную альтернативу Телеграм и WhatsApp*. Тестим мессенджер в Битрикс24 в издательстве настольных игр +1

05:47

Ремонт техники без иллюзий: сложные ремонты, свой сервис и техноблог — интервью с Сергеем Павленко +1

05:38

TSMC: почему 90% передовых чипов в мире делают на одном взрывоопасном острове +124

11:07

Что на самом деле происходит в комнате с пирамидками и почему после неё не верят даташитам на микросхемы +43

22:13

Выжать больше из локальных LLM. Ollama медленнее llama.cpp в 3 раза. UD_Q4_K_XL лучше чем Q4_K_M, а вес тот же и т.д +36

08:01

OpenSearch Dashboards и как веб‑интерфейс упрощает работу с кластером +29

12:00

Возвращение испанской барахолки: аудиосистемы, интернет по проводке, баян и кое-что еще +28

12:04

Тихий перфоратор для соседа: как спроектировать тактовый генератор с распределенным спектром +27

15:22

Вы еще спрашиваете, почему все ненавидят рекрутеров? +25

07:05

Дело 2005г.: Sony BMG против собственных покупателей или как защита от пиратства превратилась в руткит +25

09:01

Редкий китайский суперстрат Vorson TS-K-6 +23

14:27

Вот как сегодня устроено российское производство +22

13:01

АПаем возможности паять: переход на новый паяльник +22

14:55

Есть ли жизнь после Cisco ISE? Распаковка и тест-драйв российского NAC от Eltex в сетевой лаборатории +19

09:49

Я устал каждый раз гуглить одно и то же в nginx — и сделал инструмент, который объясняет конфиги на русском +19

05:35

Обзор релиза Kubernetes 1.36: перестаём пересобирать образы, чистим «зомби» PVC и читаем логи без SSH. Разбор 68 фич +17

14:15

Подводные камни распараллеливания автотестов +16

08:50

Как дообучать локальные LLM в 2026 году: практическое руководство +15

14:05

Intl: мощный браузерный API, который вы, возможно, не используете +14

05:49

Почему я так придираюсь к вёрстке (и вам советую) +14

12:34

Почему автотесты пропускают изменения в API и как это исправить с Pydantic +13

11:41

Чит-код для ИТ-карьеры: как рецензирование книг помогает проходить собесы в бигтех и прокачивать личный бренд +13

19:02

Минцифры идёт на зачистку. Малые операторы — под нож… +243

09:01

Реверсим штатный ключ сигнализации JAC-Москвич +73

09:01

Тридцать три тысячи жизней: самое громкое киберпреступление в истории Финляндии +55

08:17

Разработка RC-машинки с BLDC. Подход с нуля +54

12:00

Практическое руководство по Qwen: установка, настройка vLLM и работа через API +45

11:39

Ловим время в формате DCF77 +38

07:02

userver 3.0 — большой релиз фреймворка для IO‑bound‑программ, переход на C++20 +33

13:01

Устанавливаем почтовый сервер Addy.io для одноразовых почтовых адресов +32

15:30

Я много лет пытался повысить продуктивность и качество жизни — эксперименты над собой (Часть 2) +27

08:00

Автоматизируем создание глобального роутера для связи выделенного и облачного серверов +27

07:05

Если трос оборвался. Что произойдет с кабиной лифта в самом плохом случае? +27

11:21

CSS для тех, кто спал и проснулся +25

13:47

Зачем айтишнику писать книги, и почему сейчас — самый лучший момент? +24

16:25

$1.8 миллиарда, два брата и ноль проверок: как The New York Times попалась на AI-хайп +23

07:00

PicoClaw на Arduino Uno Q +23

06:20

IT-монополии наперегонки сращиваются с государством: кто быстрее? +20

11:17

Как ускорить верификацию: советы для инженеров и менеджеров аппаратной разработки +19

09:30

Запускаем Qwen3.6 35B-A3B + opencode локально на RTX 4070 12GB — AI-ассистент для разработки без облака +18

07:06

Рецензия на книгу «Основы разработки приложений для iOS» +17

07:09

Возвращение легенды: почему Fortran снова в топе и где его использовать сегодня +16

ОБСУЖДАЕМОЕ

  • Минцифры идёт на зачистку. Малые операторы — под нож… +243

    • 477   40000

    Парадокс «кадрового голода» 2026: почему вакансий меньше, а работать некому? -8

    • 152   26000

    TSMC: почему 90% передовых чипов в мире делают на одном взрывоопасном острове +124

    • 89   24000

    Роботы заменят людей? +7

    • 85   7800

    Покупатель попросил готовить дом к его приезду и приносить ему еду. Тогда я понял, за что берут 900 тысяч за сотку +9

    • 75   31000

    Зачем ИТ-специалисту семья, или как не потерять себя на работе и в разврате? -15

    • 56   19000

    Реверсим штатный ключ сигнализации JAC-Москвич +73

    • 41   13000

    Вы еще спрашиваете, почему все ненавидят рекрутеров? +25

    • 38   13000

    Зачем айтишнику писать книги, и почему сейчас — самый лучший момент? +24

    • 37   11000

    Что на самом деле происходит в комнате с пирамидками и почему после неё не верят даташитам на микросхемы +43

    • 35   13000

    Если трос оборвался. Что произойдет с кабиной лифта в самом плохом случае? +29

    • 33   8800

    Способы достижения технологической независимости в области ЭВМ -2

    • 29   8100

    Ловим время в формате DCF77 +38

    • 29   11000

    АПаем возможности паять: переход на новый паяльник +22

    • 28   13000

    Запускаем Qwen3.6 35B-A3B + opencode локально на RTX 4070 12GB — AI-ассистент для разработки без облака +18

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