change test file structure and add twist tests

master
Vishnunarayan K I 2019-09-28 18:41:19 +05:30
parent abdaebba8d
commit 7c1d4a3634
11 changed files with 8153 additions and 9 deletions

View File

@ -39,14 +39,14 @@ class TwistMoe(Anime, sitename='twist.moe'):
headers = {
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.46 Safari/537.36'
}
first_time = helpers.soupify(helpers.get('https://twist.moe', allow_redirects=True, headers=headers))
js = first_time.select_one('script').text
js = "location = {'reload': ()=>true};document = {}; \n" + js + f"console.log(document.cookie)"
cookie = eval_in_node(js).strip()
with requests_cache.disabled():
headers['cookie'] = cookie
r = requests.get('https://twist.moe/', headers=headers)
soup = helpers.soupify(r)
soup = helpers.soupify(helpers.get('https://twist.moe/', allow_redirects=True, headers=headers))
if 'being redirected' in soup.text:
cookie = get_cookie(soup)
with requests_cache.disabled():
headers['cookie'] = cookie
# XXX: Can't use helpers.get here becuse that one is cached. Investigate
r = requests.get('https://twist.moe/', headers=headers)
soup = helpers.soupify(r)
all_anime = soup.select_one('nav.series').select('li')
animes = []
for anime in all_anime:
@ -111,3 +111,10 @@ def decrypt(encrypted, passphrase):
iv = key_iv[32:]
aes = AES.new(key, AES.MODE_CBC, iv)
return unpad(aes.decrypt(encrypted[16:]))
def get_cookie(soup):
js = soup.select_one('script').text
js = "location = {'reload': ()=>true};document = {}; \n" + js + f"console.log(document.cookie)"
cookie = eval_in_node(js).strip()
return cookie

4992
tags Normal file

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@ from pathlib import Path
def configure_httpretty(sitedir):
httpretty.enable()
dir = Path(f"tests/test_sites/test_{sitedir}/webpages/")
dir = Path(f"tests/test_sites/test_{sitedir}/")
data_file = dir / 'data.json'
data = None

View File

@ -0,0 +1 @@
[{"method": "GET", "url": "https://twist.moe/", "file": "tmpp43aw_mv"}, {"method": "GET", "url": "https://twist.moe/api/anime/shingeki-no-kyojin/sources", "file": "tmpfczuk35z"}]

View File

@ -0,0 +1,202 @@
[
{
"id": 18901,
"source": "U2FsdGVkX1+t9kziRSsIW171AGM9UO4C55I2D/xndLWeoru4RgiFromUdSkbkfsV8JjNdcwvoJXE3/yCSpYFYn4jFLw7iF7UV9twBh/NFhjZmOwEIW3rxwzY4ui26ZzJMhXmXGD5JMzODMxPmhPVbg==",
"number": 1,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18902,
"source": "U2FsdGVkX19rNREQUjCy31xPL5BCFvswENq5crognWIDhAzJEFc1FNtvTIRJAnbNRuWmyNweubUBBRNVmzakLu3nmv78DpiF2eLISDcUc5csT1TKJXJiIfvuPSDn3waHuGz48JgADTqhR9nu0gJgag==",
"number": 2,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18903,
"source": "U2FsdGVkX19jRHSXbmqwFGqNifA5PaX/4me1+BNEobfv1tI6zXrfhXHCCvjgnLqScrxfPKxtp/JWUNqbjYjUfzyzc2/LzsqqWgrbbUCgIyXgyPe82QfYQdESpzwbzBtTthhgIzybdTyOMRrxhUEpCA==",
"number": 3,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18904,
"source": "U2FsdGVkX189inutThHMN/YnsqlCW38Fm47Cv1UTwepgeTMwlD+afin5GTEb7W63P/lNR6ZfjtDO9q6GP/u0oqU623JS9F6sVrF9PBFgqZnXtdwb73/RN/Wg00dR9DxCLOrFokI3Aj2irkV1KrRGng==",
"number": 4,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18905,
"source": "U2FsdGVkX1+z2M0/uyCyHwqWOksw7btovAbXh0lXpdOFNfAsIhfbKPkjQMpBZhCz7zN+Wmxy8wrrtuLgt6o3UqaPh0IEy+HbIW4+1tgU0DUixf/+rg++iV7FntTrfHznxrWMdDY23dgZYL/C5gJyvg==",
"number": 5,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18906,
"source": "U2FsdGVkX1/NcAokpp4ADR8V9aULA1t0WttDVTsdD1mN6K40qzWIDWMPkG/vW0KiA0yCkPUp/EMdKXxylmW6/6Urn7lsFeCQ280gEIunhGHwFOBgv3oM2zN82/d90Ticd5gOCAOHmtMCJPAJrxw6jQ==",
"number": 6,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18907,
"source": "U2FsdGVkX1+Z+zY4vJJEz/FV2W11oPJGseUqRXI/au3E22+550yG/T+84Wdt7OHELjyfCpOo7JMVhWkKSxbS7v8xGilNqCmogiJDR/s1BEi0WAIHTIRr0PIacKv7QD2xQpk5nzihdkSLjAYLDBX9SQ==",
"number": 7,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18908,
"source": "U2FsdGVkX18wbcLcy3EuyXhJJRuEpT5cwJmVUuIuvVdZBOztyM8D+n9AM7rbdVp7RZW95Hku1fknl5oDn2U4kPOOJ9ak3u4mvnmbYqmxAW0JFH7jwByzeeiItDl3NbGODbupBoLKxXZcuuT2jk0p4w==",
"number": 8,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18909,
"source": "U2FsdGVkX1+4MU2m0Qm1/aOzhE5gQJjMNxF34uPfYTVu1FDF9OcQH5WYA5/sVMV8UVcvHhmI3Bs6egJvGdxaL+EnHqEVxDGyx6uRSOHG1kVbst4LjK14OqIfslXxtOMbPY8UETUSnhhxLXJaKmqEQg==",
"number": 9,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18910,
"source": "U2FsdGVkX19jfdfKTFDcyfWKTC1w1ZBRhlRQbe+8R1WGouG0Tad4bxBLHc7k9JsCMDOi6enusuV2O8c9I+wZCmJx51BiQFHB77xZHGjhmTCa20VSsOO1KDNC6SA7yLV/b7kZGrfqUcf1ITgPoWuFqQ==",
"number": 10,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18911,
"source": "U2FsdGVkX1+sbR3ejv6KpK8+zNc4hhfZCRf/CvUBLnMFrcvXlBcAJ9hQpeuX/vdgOHn7OV+k7HGnFCioImxP2BAXSJ3UM/KsA5+l3uaokv+EQHTara37DE5er4THwKugT2pc3EjCCkO2VbjNtD8THg==",
"number": 11,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18912,
"source": "U2FsdGVkX1+ULUv/Q9FfhjyWJwL6IFc4bwi28R8I1aYerBYN7sSd7OvdmVM3KhseHRQA4rm/4GAcGctpsyHGd/5Ts5nG2e8I2SksGTm9NfjMlSTD0to6R60iZ98ZUO43v/6o4baSP+Ed4FeYLWledw==",
"number": 12,
"anime_id": 230,
"created_at": "2016-08-24 14:57:57",
"updated_at": "2016-08-24 14:57:57"
},
{
"id": 18913,
"source": "U2FsdGVkX19jYK5ynaUc8eerZJX4qQq2slFjqVUElcoSDEQYmOh5yX43WwJUEPcCOs/J3aQaSxUT1mkLlLgnLbNX6tYYe9kSp+KPipG82iQNPv5YRCn46yDfb7Xav/fXxxstUVCJKJY6ADPwoi5suA==",
"number": 13,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18914,
"source": "U2FsdGVkX19UqU8KnIxZ6WshnJU2FlC+Nn+p0JZeO5+hq+p8Spk43PX7R5kNV8iexu4ocmm15BJLAlLqVK6VoKQxH1RR0UhgT3u0RK1O27+CI593DH3YV5FHfwTSX7teZMY0QEkbHvILAIGJgFyaqA==",
"number": 14,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18915,
"source": "U2FsdGVkX187wUrFSM64/RUUKC+/SVM/w3aLSwqj6in1WXHVMuVt51rYA9L9cAWBswOsvOzpCEbjwf5ARurdBvVPVscWBxLSpWrNTHZtq8W4JJgG8Qx0bPprnaf6VunjRpxgQix0wjUKzwU6YC7RrQ==",
"number": 15,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18916,
"source": "U2FsdGVkX19OLVbgMUN8VY5LjMjhoVwGqUeYOB4rctTBHPYIRR9FQWn/stM/23+kz2Zy7zZ38Ja/cbDXqTjU0AntwgLTLuVylPRZv8KdQ7DRqSHStc8xfzIL7ggPQJ3NYsDfl41kkUDu2/vIt3Iw8g==",
"number": 16,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18917,
"source": "U2FsdGVkX1/MXLTDwyyQKOO933EgkdoNGn/q4BE7p17QLt3fNXly+lhUL55aMiHvNPUN0dRiy6uT95sDOUrGXDfUzHeknKab5n16OI/UsDnmca0Fr7XDtU4XtMuEkgZYyY8HcqEL6VyTXqQ4JrK7Ww==",
"number": 17,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18918,
"source": "U2FsdGVkX19FJyqcZe9yMZB4i73DR39XKhpMTqMyq2YxCJ7HxUGUdw9FsWpDDR5N7GCLpmpd6Rq+VIIOAq99acTnKJqGwrzHaIf55OPuDAfMHneYyGFbLwnKLJU8XvLfLnS6Hcx8Ju9D94xNN/vlFQ==",
"number": 18,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18919,
"source": "U2FsdGVkX19HWe/urXBduVrSL3zNHLJf7CWcHkUhMf1nxPFMTXn5QZx5aG7+ZAkILMu0E0Ij57NJd5lAJaSYTvHlhpB2FfcefNHJgQ0N5qLb40VSWpceQZOT4UYqES90vUJa3vFo/IyiujV1rnE9kQ==",
"number": 19,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18920,
"source": "U2FsdGVkX19OQpN5S+N7qLv2jXUPabbedy2rmzoilwpr+ikSRaWVlNc2k2x1D7W31ma5g2HN0BaOWbzI+EgIDMab5qS9d+MauoHD5OOqZYSpZLJLk3+i3uGFXTTyQnIrJD4k44gj8c04eWqGWb5Hlg==",
"number": 20,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18921,
"source": "U2FsdGVkX1/APwDYuOTX7cJp4Rem+U3/+akJbTFD86VH3tlUhW+5lqBWkxe6tHf1fkokSpG1DVJd23WGoOd4a8zUv0hvnGgMkvQF1fyecei2JCu5Kfz1eMlgM40PA3O7rDryT4Ju6UrSxOAgU+eOSg==",
"number": 21,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18922,
"source": "U2FsdGVkX1+qazLSmygA751GfjcIkzv0uHGBjYl4WhP/fuP2TUouFL+9yJq5MC/xxgB/mXuLKQ11JBP3vAShvLhgqFSSkCSkqroYROUnN3Sbpy4hh9JOVNy0ONHnJAG2TOVedaeUSUYiBDUHb6P6KQ==",
"number": 22,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18923,
"source": "U2FsdGVkX1+dYvijqs7E3sSxZLnWYjxw5ySyvtGqffCAIXLUs2b9dtJ9OmAkj0jWk+9X9h1dfHC97qoXbRATdG5tq6jMa9+6jmChnNXnvGkatHfV64Q1pw7lG3TLqnLkE6xCnGsX2v5idoPVNu0BEQ==",
"number": 23,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18924,
"source": "U2FsdGVkX1/JkLMqa/IZNefhiES9b/dNwNiQ9WrflWxAFhpUdFlD6SzVvX6q95FqPQX89vXB+SyLZKywX7NwTWX7CXBGr/BtZdPIjqLVHHMbCHVzMldfeihDuxg6n8lxEIDKpSmZ+EAD3jX9Pufuhg==",
"number": 24,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
},
{
"id": 18925,
"source": "U2FsdGVkX1/AtJ5BMp7wqyZq77QtvJWaEFl4T4N8n4phDXDhv5d96kOJiOuVPS16+zDnU3A31VPS532Eybpeg3e5oMZgOM1hEQrvTSbkuUKdyo5bEV3WLky5WrRZmXLfRcYWEeTmPPbZYWLLwccYxg==",
"number": 25,
"anime_id": 230,
"created_at": "2016-08-24 14:57:58",
"updated_at": "2016-08-24 14:57:58"
}
]

File diff suppressed because one or more lines are too long

28
tests/test_twistmoe.py Normal file
View File

@ -0,0 +1,28 @@
import pytest
from anime_downloader.sites.twistmoe import TwistMoe
from test_sites.site import configure_httpretty
@pytest.fixture
def anime():
return TwistMoe('https://twist.moe/a/shingeki-no-kyojin/first')
configure_httpretty('twistmoe')
def test_search():
ret = TwistMoe.search('shingeki no kyojin')
assert len(ret) == 5
assert ret[0].title == 'Shingeki no Kyojin'
def test_title(anime):
assert anime.title == 'shingeki-no-kyojin'
def test_length(anime):
assert len(anime) == 25
def test_streamurl(anime):
assert anime[0].source().stream_url == 'https://eu1.twist.moe/anime/attackontitan/[Coalgirls]_Shingeki_no_Kyojin_01_(1920x1080_Blu-ray_FLAC)_[AEF12794].mp4'