Skip to content

Instantly share code, notes, and snippets.

@artemklevtsov
Last active November 12, 2016 05:05
Show Gist options
  • Select an option

  • Save artemklevtsov/c73b9053c9e71362c5348ae3e35cd42d to your computer and use it in GitHub Desktop.

Select an option

Save artemklevtsov/c73b9053c9e71362c5348ae3e35cd42d to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# Импорт библиотек
import sys
from urllib.request import Request, urlopen
from urllib.error import HTTPError
from html.parser import HTMLParser
import json
class Parser(HTMLParser):
"""
Класс для получения URL видео на странице
"""
def __init__(self):
super().__init__()
self.result = None
def handle_starttag(self, tag, attrs):
if tag != "div":
return
d = dict(attrs)
if "id" in d and d["id"] == "playerContainer":
data = d["data-config"]
self.result = json.loads(data)["video_url"]
return
def get_video_url(twit_id):
"""
Функция получает URL видео по ID твита
"""
# Формирование URL для запроса
url = "https://twitter.com/i/videos/tweet/{}".format(twit_id)
req = Request(url)
# Получение исходного текста страницы
try:
resp = urlopen(req)
except HTTPError as e:
if e.code == 404:
return "Данный твит не содержит видео или видео размещено на внешнем хостинге (Ошибка 404)."
else:
return "HTTP Error {}.".format(e.code)
# Получение исходного кода страницы
html = resp.read().decode()
# Извлечение URL видео
parser = Parser()
parser.feed(html)
video_url = parser.result
parser.close()
return video_url
if __name__ == "__main__":
# Чтение аргумента командной строки
if len(sys.argv) < 2:
urls = input("Введите URL твитов через пробел:\n").split()
else:
urls = sys.argv[1:]
for url in set(urls):
# Извлечение ID твита
twit_id = url.split("/")[-1]
# Получение URL видео
url = get_video_url(twit_id)
print(twit_id, url, sep = ": ")
@artemklevtsov

artemklevtsov commented Nov 12, 2016

Copy link
Copy Markdown
Author

Вызов скрипта.

$ twitter-video.py \
               https://twitter.com/bhaskar_vk/status/796851488085577730 \
               https://twitter.com/RT_InoTV/status/797096643317338112 \
               797075010124922881
796851488085577730: https://pbs.twimg.com/tweet_video/Cw77tKUWgAERim_.mp4
797075010124922881: https://pbs.twimg.com/tweet_video/Cw_HdQ7XcAAnODC.mp4
797096643317338112: Данный твит не содержит видео или видео размещено на внешнем хостинге (Ошибка 404).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment