Загрузка...

Script for uploading clips to VK

Thread in Python created by vypivshiy Apr 19, 2021. 5213 views

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

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

    Работающие параметры следующие. В том числе для публикации в группе.
    {'v': 5.132, 'file_size': 16384, 'group_id': GROUP_ID, 'access_token': TOKEN}
     
  12. alkashiekb
    alkashiekb Mar 11, 2023 0 Mar 11, 2023
    не подскажете как этим кодом пользоваться? куда вставлять?
     
  13. beliboba
    beliboba Jun 29, 2023 0 Feb 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, правда клипа нигде нет
    The post was merged to previous Jun 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
     
    1. pipipupupipi
      @kmedzhidov,тоже отдает 200, подскажи как заполнить урл, пожалуйста
  14. JimBov
    JimBov Oct 16, 2024 0 Jun 3, 2020
    Накрутка не робит
     
  15. XqLL
    XqLL Dec 1, 2024 0 Mar 27, 2023
    каким методом добавить клип в отложку? пост можно добавить а вот именно клип не где нету
     
Top
Loading...