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

Подписка


ЛУЧШЕЕ

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

Дело о длинном тире +36

10:13

Как сломать сервер без обновления Php. НА Пальцах +21

12:17

8 интересных способов использования GPT-6 Astra, про которые знают не все +17

12:10

Лайнер, в который заходили через багажное отделение +16

09:02

Как из двух кубиков выбить число Пи? +15

04:15

Самодельный ВЧ-паяльник в духе Metcal на USB-C: по мотивам статьи с Хабра +13

10:50

Через тундру на Монмартр: как простой механик выиграл гонку Нью-Йорк — Париж 118 лет назад +9

13:01

Номерные радиостанции: криповая «Шведская рапсодия», тирольские напевы и «Радио Судного Дня» +7

09:12

Древние боги под радиоактивными пустошами: самые жуткие тайны вселенной Fallout +7

09:33

Локальная генерация на 16 ГБ: что умеют новые модели +6

08:06

Ускоряем развитие Wine с помощью ИИ +6

07:16

Зачем ИИ-моделям самореплицироваться. Или это нужно не им? +6

13:39

Никогда не задавайте ИИ вопросы на которые не знаете ответа +5

08:03

Кто ты без своего костюма? Гений, миллиардер, аналитик 1С +5

06:45

Как поставить Arch Linux рядом с Android по USB-кабелю: пошагово, с Windows или Linux +5

10:31

Особенности при разработке одноплатника на RK3568 +4

07:31

Расшифровываем цифровую шину мультимедии (A2B) в китайском кроссовере +4

04:05

Они не взламывали Polymarket, а просто подменили его тест скорости +4

14:32

«ИИ не научит вас делать лучшие макеты»: как нейросети изменили работу продуктового дизайнера +3

09:36

За пределами вайбкодинга: фундаментальная база программной инженерии +3

12:59

Методичка по построению VPN, осень 2026 +91

14:05

Как я отремонтировал 32-х летний ноутбук с кафедры университета и для чего он мне нужен в 2026'ом +63

10:00

Я нарисовал алгоритм, который взрослые давно перестали замечать +59

09:01

История письма, часть 15. Суровые и причудливые орфографии скандинавов, или зачем норвежцам две языковые нормы? +41

11:15

Как черенок от метлы стал джойстиком Airbus и почему о нем спорят почти 40 лет +32

08:30

Два инженера против сроков: чему нас научили два месяца агентной разработки +30

11:20

Сокол среди ужей +22

13:01

Caraya E210BS — отличный стратокастер за смешные деньги +19

10:48

Что там с китайским авиапромом +19

10:05

Не DeepSeek единым: 4 китайских ИИ-проекта, о которых стоит знать +19

17:24

Вам не нужны bool и Option +18

20:31

ReactOS: итоги хакфеста во Флориде — новые возможности ядра, поддержка NTFS, SMP и перспективы перехода на NT 6+ +16

10:28

Препарируем мозг Qwen 3.8 27B-1c +12

08:39

Восстановление готических соборов при помощи станков с ЧПУ +12

23:49

Взглянуть на мир глазами кошки +11

19:12

Странная квантовая теорема добила реальность Эйнштейна: история теоремы PBR +11

16:12

Mac сам вычисляет вашу семью: разбор недокументированного графа знаний macOS +9

10:45

История телефонисток AT&T, или Почему технологии не могут сразу вытеснить ручной труд +9

09:12

Вторая жизнь ретроконсолей: как энтузиасты исправляют ошибки производителей спустя десятилетия +8

22:24

Я устал от VLESS-клиентов и написал свой. Rust, EvertyUI, Mihomo и немного экспериментов с ИИ +7

14:11

Знакомый пишет, что на вас штраф. Новый схематоз мошенников — такого цирка я еще не видел +68

09:01

Электровакуумное дело. Биндер +62

16:11

Эмодзи козла — валидный машинный код 8088. Я собрал из эмодзи целые программы +50

06:01

Крутое пике: что происходит на ИТ-рынке труда в 2026 году +46

13:03

Как получить электроэнергию при помощи списанного авиадвигателя +40

13:01

Мультиплатформенный движок для конкурса Nokia 3310 Jam +32

08:05

Что умеет «486SX на максималках»? Запускаем промышленный мини‑ПК из двухтысячных +27

06:20

Чем заменить Claude или Gemini после блокировки +27

08:00

Code-server: поднимаем личную IDE в браузере +25

10:46

Как защитить свой сайт от взлома. ПО Шагам +22

08:34

Брусофония: как устроен звук в игровой приставке «Брус-16» +22

14:53

Большинство ИИ-агентов внутри одинаковые. Тогда в чём разница? +21

04:10

Экран для старой кассы стоил около $300, и я вывел картинку на VGA через Raspberry Pi Pico +17

07:06

От фараонов до телеграфа: вся история шифрования до эпохи компьютеров в одной книге +16

12:15

Слетать к Марсу за горстью пыли: зачем ученым понадобился грунт Фобоса +15

07:55

GitOps «сломал» CI/CD — настраиваем промоушен: от костылей и sed до Kargo (разбор на практике и неочевидные нюансы) +13

21:09

11 наносекунд на слово: до смешного эффективная сверхоптимизация анаграмм +12

10:23

Wi-Fi не добивает до дальней комнаты. Что лучше: усилитель, mesh или второй роутер +12

05:25

Луддиты: история от первых паровых машин до наших дней и AI +12

12:31

Как мы построили систему планирования производства для типографии и проверяли его точной моделью +11

ОБСУЖДАЕМОЕ

  • Крутое пике: что происходит на ИТ-рынке труда в 2026 году +46

    • 177   72000

    Чем заменить Claude или Gemini после блокировки +27

    • 160   87000

    Методичка по построению VPN, осень 2026 +91

    • 98   64000

    Как я отремонтировал 32-х летний ноутбук с кафедры университета и для чего он мне нужен в 2026'ом +63

    • 73   12000

    Знакомый пишет, что на вас штраф. Новый схематоз мошенников — такого цирка я еще не видел +68

    • 61   68000

    Как защитить свой сайт от взлома. ПО Шагам +22

    • 50   68000

    Я нарисовал алгоритм, который взрослые давно перестали замечать +59

    • 46   20000

    Режим полета стал ритуалом. Только защищает он вовсе не самолет +7

    • 41   9400

    Как получить электроэнергию при помощи списанного авиадвигателя +40

    • 34   9400

    Вам не нужны bool и Option +18

    • 24   37000

    Wi-Fi не добивает до дальней комнаты. Что лучше: усилитель, mesh или второй роутер +12

    • 24   9300

    Умные термоголовки: тест Aqara, Sonoff, MOES — и что внутри у Яндекса и Сбера +3

    • 24   5200

    Электровакуумное дело. Биндер +62

    • 22   11000

    Взглянуть на мир глазами кошки +11

    • 21   8500

    Учись 5 лет — получи дубликат диплома и отписку. Ошибки ВУЗов, слабые законы Минобрнауки — расплачиваться вам +1

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