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

Подписка


ЛУЧШЕЕ

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

Самые дикие налоговые проблемы эмигрантов (и возвращантов) из РФ в 2025 году +64

07:01

Технологии древних: WAP-сайт своими руками +32

08:03

Три брата UX’a: PX, AiX и MX +23

13:11

Если вам звонят из службы безопасности банка — будьте осторожны. Это может быть служба безопасности банка +21

09:01

Что новенького есть в CSS в 2025 году? +18

12:05

Ненависть к брокколи: как вкус защищает от бактерий и ядов +17

07:08

Плазменная обработка почвы — как и зачем? +16

11:31

Экономический эффект DBaaS за пределами сервера: руководство для топ‑менеджеров +15

07:12

UX-исследователь среди разработчиков: инструкция по выживанию без CS-диплома +13

08:57

Pyra: краткий обзор и первые впечатления +12

08:48

8 полезных промтов, как усилить сгенерированный ИИ текст и удержать внимание читателя +12

07:01

«Отказываться нельзя использовать» — как мы расставили ключевые запятые, исходя из опыта работы с low-code платформой +12

09:07

Почему работать эскортницей лучше, чем дизайнером? +11

11:23

Как спрятать сontrol plane Kubernetes от любопытных глаз +9

11:05

Палеошпион юрского периода +9

10:31

Байки из ЦОДа-2: кошки-мышки, роковой галстук и зима в машзале +9

09:12

Как в Авито разработали метрику для поиска распространённых проблем крупных пользователей +9

08:41

«Чёрное зеркало» в реальности: как мы сделали приложение будущего +8

10:48

27 миллионов абонентов под угрозой: разбор крупнейшей кибератаки на корейский телеком +7

09:11

Data Internals X 2025: взгляд изнутри на настоящее и будущее data-инженерии +7

08:00

Ethernet с дальностью до километра. 10BASE-T1L +118

09:05

Великое вымирание: как ИИ разрушает интернет +70

09:01

Математическая живопись Иньиго Килеса +57

08:36

«Щи: симулятор жестокости» или «Как не надо делать игры» +51

06:00

Ограничения на пути достижения Общего Искусственного Интеллекта (AGI) +48

13:30

Как мы реализовали георезервирование инфраструктуры для системы видеоконференций: опыт, ошибки, выводы +43

05:29

Паттерны современного Node.js (2025) +40

10:00

«Вымпелком» – ваше окно в мир спама +36

04:59

Кибератаки на Россию, а также ядерный межстрановой щитпостинг +36

13:01

Как работают экраны? От электронных пушек до кристаллов +31

20:37

Программа «Hello World» на машинном коде под DOS +29

13:51

Мы начали в гараже, доросли до завода, продавали в 43 страны мира, а вот что теперь +25

12:01

Как не подготовить проходной доклад и что сделать, чтобы на конференциях вас слушали +25

10:33

6 приёмов создания отличных Shell-скриптов от пользователей Hacker News +22

10:31

Опенсорсим yx_state — свой State Management для Flutter +21

13:52

Почему стоит использовать Tagged Unions при разработке на TypeScript +19

06:34

Прошивка К1921ВГ015 без IDE и покупки JTAG программатора +18

12:41

Когда кто-то другой делает что-то великое, Джобс делает вид, что это сделал он +16

11:40

Какие сервисы для приёма платежей в криптовалюте лучше +16

20:06

Важные языки. Часть 2. Lisp +15

13:01

Про свёрла +393

22:55

«Волк» уволен из Газпрома за подписку на Антона Назарова +78

09:01

Автоматический светодиод +62

22:39

Брелок с LED матрицей 8x8 на CH32V003 +34

13:02

Прощание с доступной Windows: Microsoft хоронит SE-версию и уступает нишу конкурентам +33

15:50

Идеальное опровержение Эйнштейна +31

08:00

Как ходоки получают разряды: обсуждаем соревнования по Nordic Walking +28

07:06

Наглядное пособие начинающего ретрогеймера. С чего начать путь в мир старых шедевров +26

08:12

Теорема о разделяющей оси при обнаружениях столкновений +23

18:53

Десять игр, в которые должен поиграть каждый геймдизайнер +22

08:20

IOCCC: Best of Show 2018 +21

08:47

О прионах и дизайне белков +15

19:16

Какого китайца выбрать? DeepSeek vs Qwen vs Baidu +14

12:09

По пакету всему свету. Изучаем пакеты в Arch Linux +13

15:45

Почему Европа не смогла сделать свою Кремниевую долину +12

18:33

AI-агенты для взлома смарт-контрактов +11

14:52

Учим LM Studio ходить в интернет при ответах на вопросы +10

11:42

Система долгосрочного и краткосрочного планирования и навигации в Obsidian (PARA) +10

07:43

Фрактальная монотипия +10

22:10

Безопасность с Astra Linux: ресурсы для специалиста ИБ +9

ОБСУЖДАЕМОЕ

  • «Волк» уволен из Газпрома за подписку на Антона Назарова +78

    • 461   180000

    Про свёрла +393

    • 296   44000

    Великое вымирание: как ИИ разрушает интернет +70

    • 132   12000

    Ethernet с дальностью до километра. 10BASE-T1L +118

    • 107   12000

    Семь смертных грехов IT-резюме. Взгляд рекрутера, отсмотревшего 1 млн+ кандидатов -6

    • 94   3700

    Прощание с доступной Windows: Microsoft хоронит SE-версию и уступает нишу конкурентам +33

    • 57   14000

    Идеальное опровержение Эйнштейна +31

    • 56   17000

    Десять игр, в которые должен поиграть каждый геймдизайнер +22

    • 50   32000

    Какого китайца выбрать? DeepSeek vs Qwen vs Baidu +14

    • 44   20000

    Автоматический светодиод +62

    • 43   13000

    Почему работать эскортницей лучше, чем дизайнером? +11

    • 40   2500

    Самые дикие налоговые проблемы эмигрантов (и возвращантов) из РФ в 2025 году +64

    • 37   15000

    Щас я правду расскажу… -3

    • 36   2700

    Программа «Hello World» на машинном коде под DOS +29

    • 35   5700

    Ограничения на пути достижения Общего Искусственного Интеллекта (AGI) +48

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