Загрузка...

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

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

  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. Посмотреть предыдущие комментарии (2)
    2. keremish
      dragon, не актуально, я нашёл инфу , если кому-нибудь нужна, пишите
    3. dragon
      keremish, для страниц уже понял как заливать, но меня интересует как для групп можно заливать через этот скрипт. Есть такая инфа?
    4. reads
      dragon, Поделишься как на страницу заливать?
    5. Посмотреть следующие комментарии (2)
  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
Загрузка...