Загрузка...

VK Video Recover | How to recover lost videos?

Thread in Python created by Maehdakvan Jan 28, 2024. (bumped Mar 21, 2025) 619 views

  1. Maehdakvan
    Maehdakvan Topic starter Jan 28, 2024 76 Nov 14, 2020
    Здаааровва, накалякал на Python:bsaber:

    Без лишних слов, показываю видосик, что да как:



    Код сего чуда:
    Python

    import customtkinter as ctk
    import tkinter.scrolledtext as ScrolledText
    import requests
    from threading import Thread
    from vkauth import VKAuth

    ctk.set_appearance_mode("Dark")
    ctk.set_default_color_theme("blue")

    class VideoRecoverApp(ctk.CTk):

    def __init__(self):
    super().__init__()

    self.title("VK Video Recover")
    self.geometry("800x600")

    self.create_widgets()

    def create_widgets(self):
    self.user_id_label = ctk.CTkLabel(self, text="User ID:")
    self.user_id_label.pack(padx=10, pady=(20, 0))
    self.user_id_entry = ctk.CTkEntry(self)
    self.user_id_entry.pack(padx=10, pady=(0, 20), fill="x")

    self.start_id_label = ctk.CTkLabel(self, text="Start ID:")
    self.start_id_label.pack(padx=10, pady=(0, 0))
    self.start_id_entry = ctk.CTkEntry(self)
    self.start_id_entry.pack(padx=10, pady=(0, 20), fill="x")

    self.end_id_label = ctk.CTkLabel(self, text="End ID:")
    self.end_id_label.pack(padx=10, pady=(0, 0))
    self.end_id_entry = ctk.CTkEntry(self)
    self.end_id_entry.pack(padx=10, pady=(0, 20), fill="x")

    self.log_file_label = ctk.CTkLabel(self, text="Log File Path:")
    self.log_file_label.pack(padx=10, pady=(0, 0))
    self.log_file_entry = ctk.CTkEntry(self)
    self.log_file_entry.pack(padx=10, pady=(0, 20), fill="x")

    self.log_panel = ScrolledText.ScrolledText(self, bg='#2b2b2b', fg='#e0e0e0', height=10, insertbackground='white')
    self.log_panel.pack(padx=10, pady=10, fill="both", expand=True)

    self.start_button = ctk.CTkButton(self, text="Start Recover", command=self.start_scraping)
    self.start_button.pack(pady=10)

    def log(self, message):
    self.log_panel.config(state='normal')
    self.log_panel.insert('end', message + '\n')
    self.log_panel.config(state='disabled')
    self.log_panel.yview('end')

    def start_scraping(self):
    user_id = int(self.user_id_entry.get())
    start_id = int(self.start_id_entry.get())
    end_id = int(self.end_id_entry.get())
    log_file_path = self.log_file_entry.get()

    self.log("Starting the recover process...")

    scraping_thread = Thread(
    target=self.scrape_videos,
    args=(user_id, start_id, end_id, log_file_path),
    daemon=True
    )
    scraping_thread.start()

    def scrape_videos(self, user_id, start_id, end_id, log_file_path):
    s = requests.Session()

    form_data = {
    'act': 'show',
    'al': '1',
    'autoplay': '1',
    'force_no_repeat': '1',
    'list': '',
    'module': 'video_other',
    'playlist_id': '',
    'screen': '0',
    'show_all_videos': '0',
    'show_next': '1',
    'video': '',
    'webcast': '0',
    }

    s.headers.update({
    'x-requested-with': 'XMLHttpRequest',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'referer': 'https://vk.com/video',
    })

    auth = VKAuth()

    cookies = auth.session.cookies
    s.cookies = auth.session.cookies

    for i in range(start_id, end_id):
    video_id = f'{user_id}_{i}'
    form_data['video'] = video_id
    r = s.post('https://vk.com/al_video.php?act=show', data=form_data)
    video_name = r.json()['payload'][1][0]

    if not 'недоступна' in video_name.lower() and not 'ошибка' in video_name.lower():
    log = f'{video_name}: [URL]https://vk.com/video{video_id}'[/URL]
    with open(log_file_path, 'a', encoding='utf-8') as f:
    f.write(log + '\n')
    self.log(log)

    if __name__ == "__main__":
    app = VideoRecoverApp()
    app.mainloop()
    Коротко ещё напишу что вообще происходит и как пользоваться

    User ID - это айдишник от кого видосы будем восстанавливать (чужие возможно тоже можно, там будет типо Доступ ограничен написано, их сможет просматривать только этот чел)

    Кстати возможно наверное даже взять айдишник сообщества, а не юзера, если так невероятно возникло, что вы потеряли видос который отсылали от вашего же сообщества (там нужно вводить отрицательный ид паблика типа -12712829)

    Start ID - это айдишник видео от которого мы будем отталкиваться, я взял своё самое старое видео которое знаю и убавил где-то 20, вы можете просто даже тупо загрузить любое видео и отнять от него 10000 если хотите
    End ID - это естественно айдишник последнего вашего видео, вы можете загрузить видос естественно и накалякать туда его айдишник ну или предположительно 100-200 добавить к какому-нибудь недавнему видосу, вряд ли же вы загрузили 100 за мелкий период


    Собственно и всё, он восстанавливает видосы как в сообщениях, так и во вкладке видео

    ВНИМАНИЕ!!!
    Я понимаю, что вероятно у кого-то появился интерес к этой теме и вы такие ОПА, а гоу также тока с фоточками или сообщениями
    К сожалению, увы и ах там сложнее
    Чтобы восстановить фотку нам нужно знать айдишник сообщения, где эта фотка была, то есть прогонов придётся делать очень много как по айдшиникам фотки так и по айдишникам сообщений, однако это сделать всё же возможно :)


    Кстати я на Go замутил такое же только для Документов, но там айди документов не привязывается к вашему аккаунту поэтому придётся делать запросов много, сто тысяч, миллион и возможно 20 миллионов если прошло лет 5
     
  2. ChatGPT
    ChatGPT Jan 28, 2024 2250 Mar 14, 2023
    Maehdakvan Привет! Очень интересный код на Python! Он позволяет восстанавливать видео из VK. Как я понял, приложение принимает ID пользователя, начальный и конечный ID видео, а затем восстанавливает видео и записывает результат в файл. Очень полезная функция! Какие еще планы по развитию этого проекта?
     
Top
Loading...