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

Cherry MX: чем маленькая инновация 80-х покоряет современный мир +51

05:00

Хватит писать «чистый» код. Пора писать понятный код +49

09:01

Изучаем рефаб Nokia 5300 за $20: как китайцы возвращают к жизни старые телефоны +41

08:30

«Колобок»: история одной советской мыши, которая не хочет работать +27

07:05

Pytest. Гайд для тех, кто ни разу про него не слышал +20

04:00

DIY Open Source принтер. Часть 2. Логика управления печатающей головой HP123 +18

07:00

Полный гайд по golden-тестам во Flutter: зачем нужны и как настроить +17

06:15

Компьютерное зрение + ARKit = AR-навигация внутри зданий +16

10:35

Как умерли небольшие контентные сайты +15

09:21

Как PHP «теряет» цифры: большие числа, double и неожиданные баги +13

13:01

Оптимальный уровень мошенничества выше нуля +11

12:28

Погружаемся в недра Retrofit +9

11:14

Как с помощью локальной LLM автоматизировать рутину и облегчить жизнь себе и коллегам +9

10:59

Читаем вместе. ИИ в AppSec: могут ли LLM работать с уязвимым кодом +9

10:34

Одна грязная чашка или как мелкий беспорядок разрушает великие компании +9

09:00

ИТ-менеджер, который перестал быть «пожарным». История управления 40 проектами и система, которая меня спасла +9

09:00

Как обмануть LLM: обход защиты при помощи состязательных суффиксов. Часть 1 +9

13:00

Что умел Nokia 3510i: ретрообзор хитового телефона. Разбираем и изучаем ветерана +8

12:16

Как измерять влияние разработки на бизнес: практическое руководство для CTO +8

08:18

DeepSeek обучила LLM за 294 тыс. долларов. Как это удалось и чем этот путь отличается от OpenAI +8

09:31

Рынок эйчара +159

13:30

Тихий апокалипсис: я устал читать сгенерированные статьи +134

06:32

Восстание терпил +67

13:01

Что такое DevOps и почему он автоматизировал не всё +50

09:01

Странные CSS-свойства, но, возможно, полезные +45

11:17

DevSecOps за 20 миллионов? Я сделал свой сканер и выложил бесплатно +36

08:57

$220К в месяц на индексации сайтов для Google +34

09:00

JavaScript, отдохни! Делаем интерактивные вещи на HTML и CSS +33

07:00

Как появилась программа багбаунти? История развития +31

07:01

Как мы запретили писать код с багами в локализации или «Без права на bug» +27

11:03

Как сделать сложный технический текст простым и понятным: приемы из практики технического писателя +22

09:58

Kandinsky 5.0 Video Lite — лучший open-source генератор видео высокого качества в классе лёгких моделей +22

15:26

Оптимизация декодера изображений для 6502 с 70 минут до одной +21

12:11

Как властители мира собираются жить вечно: для них старение – техническая задача, которую надо решить +21

09:39

Алгоритмы, базы и порядок: практическая подборка книг для разработчиков +20

08:07

Оптимизация выравнивания и заполнения структур в Go. В 2025 г. всё ещё экономим на спичках +20

09:30

Собственное файловое хранилище для 400 Пбайт видеоконтента +19

09:30

Собственное файловое хранилище для 400 Пбайт видеоконтента +19

18:26

Как вероятность 1 к 73 000 000 стала приговором для матери двух младенцев: дело Салли Кларк +18

08:30

Делегирование прав локального админа Windows — Систематизация и автоматизация +18

06:00

The Goddess's Will — или почему никто не делает видеоигры в стиле пререндеренного 3D, а мы делаем одну такую +100

15:21

Как я, не разработчик, читаю туториал, который ты, разработчик, написал для меня +82

06:20

Как не сойти с ума на умной работе: инструкция по психологическому здоровью для ИТ-шников +79

08:05

Оперативная память: исчерпывающие руководство. Часть 1 – Физическое устройство RAM от атома кремния до реальных чипов +69

21:57

От счетной машины к клавиатуре — неожиданная история нампада (и почему на телефоне все наоборот) +52

12:00

Изготовление корпуса для часов из дерева +43

09:01

Сильный ИИ как фантазия. Теорема Теслера +43

08:48

На страже безопасности: один день из жизни инженера по ИБ +41

17:36

Мифы об изучении языков, ч.2 +39

14:00

Вконтакте убил мой бизнес, теперь я строю канализационный коллектор и счастлив +39

05:03

НДС 22% для всех желающих, а также Трамп против парацетамольных аутистов +38

18:06

ESP32-CAM: Алгоритмы компьютерного зрения +33

06:00

Налоговая реформа 2026: полный гайд по изменениям для бизнеса +31

14:17

Как мы в Авито автоматически лечим ноды в Kubernetes +30

09:47

Рабочая машинка на ARM, Linux: год спустя +29

13:01

Как посчитать, сколько людей в лаборатории +27

08:30

Трюк, который раньше ускорял Python, теперь лишь захламляет код +22

08:11

Аргумент против существования теории всего +20

07:16

Алиса в стране ПК: французский компьютер с трасс Формулы-1 +18

12:00

Можно ли сделать мобильный интерфейс без человека.  Эксперимент с ИИ. Часть 1 +17

ОБСУЖДАЕМОЕ

  • Рынок эйчара +159

    • 206   14000

    Тихий апокалипсис: я устал читать сгенерированные статьи +134

    • 193   12000

    Рабочая машинка на ARM, Linux: год спустя +29

    • 108   10000

    Налоговая реформа 2026: полный гайд по изменениям для бизнеса +31

    • 105   45000

    Как властители мира собираются жить вечно: для них старение – техническая задача, которую надо решить +21

    • 89   19000

    Восстание терпил +67

    • 87   31000

    Как я, не разработчик, читаю туториал, который ты, разработчик, написал для меня +82

    • 81   12000

    Вконтакте убил мой бизнес, теперь я строю канализационный коллектор и счастлив +39

    • 67   36000

    The Goddess's Will — или почему никто не делает видеоигры в стиле пререндеренного 3D, а мы делаем одну такую +100

    • 66   22000

    Изготовление корпуса для часов из дерева +43

    • 51   4500

    Осенняя распродажа Steam 2025: топ-50 игр по скидкам +9

    • 44   34000

    Хватит писать «чистый» код. Пора писать понятный код +49

    • 37   9700

    $220К в месяц на индексации сайтов для Google +34

    • 37   15000

    Мифы об изучении языков, ч.2 +39

    • 37   11000

    Как не сойти с ума на умной работе: инструкция по психологическому здоровью для ИТ-шников +79

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