Загрузка...

Скрипт загрузки клипов в ВК

Тема в разделе Python создана пользователем vypivshiy 19 апр 2021. 5223 просмотра

  1. vypivshiy
    vypivshiy Автор темы 19 апр 2021 11 16 апр 2021
    Привет всем, выкладываю исходник-пример реализации публикации клипов в :vk:
    Основная проблема тех, кто пытался это сделать, не работает стандартный метод files из коробки в библиотеке requests.
    Это косяк их сервера, так как через html форму клип заливается на ура.
    Пример html формы для публикации клипа:
    HTML
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Публикация клипа</title>
    </head>
    <body>
    <!-- В action подставляем ссылку полученную с запроса https://api.vk.com/method/shortVideo.create -->
    <form action="https://ovu.mycdn.me/upload.do?\..." method="post" enctype="multipart/form-data">
    <input type="file" name="data" value="video.mp4">
    <button>Загрузить клип!</button>
    </form>
    </body>
    </html>
    На помощь к нам идёт сторонняя библиотека для requests - requests_toolbelt. С помощью данной библиотеки можно представить html код выше в виде запроса!
    Для данного скрипта необходимы python 3.6+ и установить через pip requests, requests_toolbelt
    Код:
    Код
    import requests
    from os.path import getsize
    import random
    import string
    from requests_toolbelt import MultipartEncoder

    filename = "video.mp4" # путь к видео, которое надо загрузить
    token = "123foo" # токен от ВК страницы
    description = "Не судите строго, мой первый тестовый клип #хештег1 #хештег_хештегич ..." # описание клипа с хештегами

    if __name__ == '__main__':
    r = requests.post("https://api.vk.com/method/shortVideo.create", data=dict(v=5.132,
    wallpost=0,
    description=description,
    file_size=getsize(filename),
    access_token=token))
    upload_url = r.json()["response"]["upload_url"]
    # подготовка multipart запроса
    fields = {
    'file': ('untitiled.mp4', open(filename, "rb"), "video/mp4"),
    }
    boundary = '----WebKitFormBoundary' + ''.join(random.sample(string.ascii_letters + string.digits, 16))
    m = MultipartEncoder(fields=fields, boundary=boundary)
    r = requests.post(upload_url, data=m,
    headers={"user-agent": "vk-test-clip-upload 1", "Content-Type": m.content_type})
    print(r.status_code, r.text) # если вернёт статус 200 и <retval>1</retval> значит клип залит!

    Ура! Клип залит успешно и его можно смотреть!
    [IMG]
    Бонус темы - накрутка просмотров на клип через API:
    Код
    from time import time, sleep
    import requests


    def code_payload(video_id) -> str:
    """подготовка vkscript кода просмотра клипа для метода execute"""
    return f"""var s = API.stats.trackEvents({{events:"[
    {{\\"e\\":\\"video_play\\",\\"source\\":\\"clips\\",\\"network_type\\":\\"wi-fi\\",\\"ts\\":{round(time())},
    \\"ref\\":\\"clips\\",
    \\"player_type\\":\\"fullscreen\\",\\"position\\":\\"start\\",\\"video_id\\":\\"{video_id}\\",
    \\"autoplay\\":\\"1\\"}}]"}}); return s;""".strip()


    if __name__ == '__main__':
    token = "" # ВК токен
    clip_id = "0_456239014" # id клипа куда нужно просмотры накрутить
    code = code_payload(clip_id)
    # максимальное число просмотров с одного аккаунта - 20. Задержка должна быть 0.5-2 секунды
    for i in range(20):
    requests.post("https://api.vk.com/method/execute", data=dict(code=code, v="5.132", access_token=token))
    sleep(0.5)

    PS:
    • requests в данном примере использован для наглядности, данное решение можно легко адаптировать под сторонние библиотеки по типу vk_api
    • Видео для клипов находить и заимствовать через те же запросы дело простое, а чтобы их выбить в тренды необходимо раскрутка, просто так не мечтайте покорить tiktok с Колей Басковым и Даней Милохиным их не будут находить!
     
  2. Осанка
    Осанка 20 апр 2021 702 16 апр 2019
    Боже блять, люблю тебя нахуй
     
  3. MorrexFR
    MorrexFR 21 апр 2021 0 28 сен 2019
    Почему то на стену добавляется, а в клипах пусто.. Уже приложение вк отснифал, сделал по таким же запросам, все равно только на стене. Никто не сталкивался с таким? Может еще какой запрос я упустил
     
    1. vypivshiy Автор темы
      MorrexFR, при параметре wallpost=1 клип на стену добавляется
    2. MorrexFR
      vypivshiy, С этим параметром разобрался. Дело в том, что у меня только на стену добавляется клип если wallpost=1, а в раздел мои клип не попадает. Если wallpost=0, то загрузка проходит тоже успешно, но клипа вообще нигде не найти
    3. MorrexFR
      vypivshiy, Не знаю как, но сегодня утром встал - все заработало)) Вопрос не актуален
  4. igorik18
    igorik18 14 июн 2021 1 13 июн 2021
    Пишет "Unknown method passed". Наверно убрали метод, хотя странно
     
    1. UNKNWNCLOWNGHL
    2. SVA_inactive715553
      igorik18, тоже самое,пофиксили ?
  5. OPTIMISED
    OPTIMISED 11 дек 2021 :pressF: 1977 29 апр 2017
    не ворк. можешь обновить тему?@vypivshiy,
     
  6. crowleyss
    crowleyss 24 дек 2021 1 8 сен 2019
    можешь обновить?
     
  7. alex_bablos
    alex_bablos 14 янв 2022 616 15 апр 2021
    Спасибо за исходники, все работает!
     
    14 янв 2022 Изменено
  8. Robinn_Good
    Robinn_Good 14 фев 2022 456 12 фев 2020
    ворк?
     
  9. battlemax
    battlemax 14 сен 2022 0 3 окт 2021
    Использовал старый access_token, получилось. С новым не получается. Пишет `Unknown method passed`.

    Скорее всего, при генерации access_token есть недостающий scope, чтоли
     
    14 сен 2022 Изменено
    1. Посмотреть предыдущие комментарии (4)
    2. reads
      dragon, Поделишься как на страницу заливать?
    3. dragon
      reads, я уже не помню как делал, но там что-то связано с новой версией API. Поищи в ней метод этот и через него можно заливать
    4. Mement0M0ri
      keremish, привет. поделишься информацией как старый access_token токен получить?
  10. BusDriver
    BusDriver 30 сен 2022 :pepedrive: За рулем. Не беспокоить. 516 9 дек 2020
    Ворк?
     
  11. reads
    reads 1 дек 2022 0 20 авг 2022
    Для метода shortVideo.create необходим токен с правами что-то вроде "shortVideo". Получить его можно либо из браузерной сессии. Как получить иначе не смог найти :(
    Как получить токен с нужными правами через oauth authorize?

    Работающие параметры следующие. В том числе для публикации в группе.
    {'v': 5.132, 'file_size': 16384, 'group_id': GROUP_ID, 'access_token': TOKEN}
     
  12. alkashiekb
    alkashiekb 11 мар 2023 0 11 мар 2023
    не подскажете как этим кодом пользоваться? куда вставлять?
     
  13. beliboba
    beliboba 29 июн 2023 0 3 фев 2020
    С таким кодом получилось. Токен получал на vkhost.github.io для vk.com
    Python
    import asyncio



    import vk_api

    import aiohttp

    from os.path import getsize



    filename = "video.mp4"

    token = ""

    description = "Test description"



    vk_session = vk_api.VkApi(token=token)



    vk = vk_session.get_api()





    async def main():

    a = vk.shortVideo.create(wallpost=1, file_size=getsize(filename))

    upload_url = a["upload_url"]



    data = {"file": open("video.mp4", "rb")}



    async with aiohttp.ClientSession() as session:

    async with session.post(

    upload_url,

    data=data,

    ) as res:

    print(res.status, await res.text())





    if __name__ == "__main__":

    asyncio.run(main())
    Возвращает 200, правда клипа нигде нет
    --- Сообщение объединено с предыдущим 29 июн 2023
    UPD: Решил. Токен от VK ME берите
    https://oauth.vk.com/token?grant_type=password&client_id=6146827&client_secret=qVxWRF1CwHERuIrKBnqe&username= ЛОГИН &password= ПАРОЛЬ &v=5.131&2fa_supported=1
     
    29 июн 2023 Изменено
    1. pipipupupipi
      @kmedzhidov,тоже отдает 200, подскажи как заполнить урл, пожалуйста
  14. JimBov
    JimBov 16 окт 2024 0 3 июн 2020
    Накрутка не робит
     
  15. XqLL
    XqLL 1 дек 2024 0 27 мар 2023
    каким методом добавить клип в отложку? пост можно добавить а вот именно клип не где нету
     
    1 дек 2024 Изменено
Top
Загрузка...