Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : (Python) - Brauche Hilfe - Video URL von XXX Seite auslesen



Prototyp
02.12.2020, 21:40
Hallo Zusammen.

Ich bin dabei mir ein Kodi Addon für eine XXX Seite zu programmieren. Soweit habe ich alles fertig.
Mein eigentliches Problem hat mit Python zwar nicht wirklich etwas zutun, aber da das Addon in Python geschrieben wird und ich keine bessere Forenkategorie finden konnte, poste ich mal hier.

Es geht um folgende Seite: https://mangovideo.club/
Wenn ich jetzt auf eine Videoseite davon gehe, z.B. https://www.mangovideo.club/videos/37224/young-busty-scene-3-quinn-wilde/, möchte ich daraus den direkten MP4 Link scrapen.

Folgende Problematik:

Im Quelltext finde ich diese Stellen:

video_url: 'function/0/https://www.mangovideo.club/get_file/1/67f4475eb186df52fcac0bb11c56037f8467bc9fe7/37000/37224/37224.mp4/?br=2803' und auch rnd: '1606940313'

Ich habe dazu bereits herausgefunden:

Viele Videos, wie auch das aus dem Beispiel hier, kann man ganz einfach so aufrufen: https://www.mangovideo.club/contents/videos/37000/37224/37224.mp4

Soweit, so gut, so einfach. Jetzt kommt aber der Knackpunkt. Es gibt auch viele Videos, die so einfach nicht aufrufbar sind, weil die URL dann auf verschiedene Subdomains zugreift, z.b. http(s)://61.mangovideo......mp4

Nun gut, also muss ich den richtigen Weg finden.

Ebenso habe ich rausgefunden, dass die richtige URL so generiert wird:
https://www.mangovideo.club/get_file/1/b7b31df66c0f84fec65c15f52ab704718467bc9fe7/37000/37224/37224.mp4/?br=2803&rnd=1606940673163 Allerdings ist das rnd länger als das aus dem Quelltext.

Ich habe schon versucht aus dem Javascript des Player schlau zu werden, um zu schauen, ob dort steht, wie die URL generiert wird https://www.mangovideo.club/player/kt_player.js?v=5.2.0
aber da stoße ich an meine Grenzen.

Vielleicht gibt es ja hier Jemanden mit Durchblick, der mir helfen kann?!

MfG.

masterholdy
02.12.2020, 22:01
tl;dr

schick mal ein bspw. wo das ganze mit deiner logik nicht gefunkt hat

ich habe einfach mal die seite geparsed und nach dem video tag gesucht und bin so direkt auf die url gekommen


$("video")[0].src
"https://www.mangovideo.club/get_file/1/b7b31df66c0f84fec65c15f52ab704712b9970827d/37000/37224/37224.mp4/?br=2803&rnd=1606939076995"

Prototyp
02.12.2020, 22:17
Könntest du mir sagen, wo oder wie ich das finde?
Wenn ich per Browser den Seitenquelltext anzeigen lassen, finde ich die von dir genannte Stelle nicht.

masterholdy
02.12.2020, 22:52
welche bib benutzt du um seiten zu scrappen?

du musst davon halt die html ansicht rendern und dann nach tags suchen können

$("video")[0].src su
$("video") sucht nach alle video tags im source code
$("video")[0] gibt den ersten video tag zurück der gefunden wird
$("video")[0].src gibt dir die bei dem ersten video hinterlegen src zurück

die syntax ist halt abhängig davon welche sprache / framework du zum auslesen, parsen benutzt
das hier war einfach javascript & jquery

https://requests.readthedocs.io/projects/requests-html/en/latest/
hier könntest du dir bspw. find angucken

wenn ich die tage mal zeit habe könnte ich gucken wie das ganze in python aussieht

Prototyp
03.12.2020, 02:34
Ja genau, mit requests.get lese ich aus. Hab aber noch nie irgendwas mit javascript und jquery gemacht. Für meine bisherigen Zwecke gat der normale HTML Code immer ausgereicht.
Danke für den Link. Ich versuche es einfach mal, mich da einzulesen. Wenn ich nicht weiterkommen sollte, melde ich mich morgen Abend nochmal.

- - - - - - - - - - Beitrag nachträglich erweitert - - - - - - - - - -

Leider kann ich unter Kodi nichts mit requests_html anfangen.
Ich könnte selenium nutzen, hab damit jetzt auch schon einige Versuche gestartet, aber ich bekomme es einfach nicht gebacken.

Cyberhotte
03.12.2020, 06:41
Schau dir mal das an, damit solltest du normal die Seite scrappen können,
https://docs.scrapy.org/en/latest/intro/tutorial.html

Das ist direkt Python und vielleicht brauchst du da kein javascript.

Kurzbeispiel aus dem TUT:


import scrapy


class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = [
'http://quotes.toscrape.com/page/1/',
]

def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('span small::text').get(),
'tags': quote.css('div.tags a.tag::text').getall(),
}

next_page = response.css('li.next a::attr(href)').get()
if next_page is not None:
yield response.follow(next_page, callback=self.parse)

gruß Hotte

Prototyp
06.12.2020, 14:54
Aktueller Stand:

Ich bin immer noch nicht ans Ziel gekommen.

Habe jetzt die letzten Tage mal mit Python 3 Selenium und PhantomJS und Chromedriver rumprobiert.
Alles gut und schön. Aber es wird immer noch nicht die Stelle ausgelesen, die ich brauche.
Vielleicht sind meine Skills dafür auch nicht gut genug. Google hilft mir jetzt auch nicht mehr weiter, habe schon etliches probiert.
Ich denke, dass erst das Javascript irgendwie ausgeführt werden muss. Aber wie gesagt, 0 Ahnung, wie das funktioniert.

echterkevin
06.12.2020, 16:04
Moin,

habe ein PHP Skript zusammen gehackt. Kannst ja mal schauen ob du damit was anfangen kannst :)


$video_id = isset($_SERVER['QUERY_STRING']) ? (int)$_SERVER['QUERY_STRING'] : '';
$html = file_get_contents('https://www.mangovideo.club/embed/'.$video_id);
$host = 'mangovideo.club';
if (strpos($html,"license_code:") !== false) {
$t1 = explode("license_code: '", $html);
$t2 = explode("'", $t1[1]);
$d = $t2[0];
$t1 = explode("function/0/", $html);
$t2 = explode("'", $t1[count($t1)-1]);
$orig = $t2[0];
$c = 16;

for ($f = "", $g = 1; $g < strlen($d); $g++)
{
$f.= preg_match("/[1-9]/", $d[$g]) ? $d[$g] : 1;
}

for ($j = intval(strlen($f) / 2) , $k = substr($f, 0, $j + 1) , $l = substr($f, $j) , $g = $l - $k, $g < 0 && ($g = - $g) , $f = $g, $g = $k - $l, $g < 0 && ($g = - $g) , $f+= $g, $f = $f * 2, $f = "" . $f, $i = $c / 2 + 2, $m = "", $g = 0; $g < $j + 1; $g++)
{
for ($h = 1; $h <= 4; $h++)
{
$n = $d[$g + $h] + $f[$g];
$n >= $i && ($n-= $i);
$m.= $n;
}
}

$t1 = explode("/", $orig);
$j = $t1[5];
$h = substr($j, 0, 32);
$i = $m;

for ($j = $h, $k = strlen($h) - 1; $k >= 0; $k--)
{
for ($l = $k, $m = $k; $m < strlen($i); $m++) $l+= $i[$m];
for (; $l >= strlen($h);) $l-= strlen($h);
for ($n = "", $o = 0; $o < strlen($h); $o++)
{
$n.= $o == $k ? $h[$l] : ($o == $l ? $h[$k] : $h[$o]);
}

$h = $n;
}

$link = str_replace($j, $h, $orig);
} else {
$link="";
}
$flash="direct";
/*
if ($link && $flash <> "flash")
$link=$link."|Origin=".urlencode("https://".$host);
echo $link;
*/
echo $link;

Frag mich nicht ... Ich habe es mit ein paar Inhalten geprüft. Läuft supi

Hinweis: "Lösung" via google / github / stackoverflow erreicht

Prototyp
06.12.2020, 16:54
Vielen Dank für deine Mühe. Aber das ist nicht genau das, wonach ich suche.

Wenn ich dein Script ausführe kommt bei mir sowas raus: die Domain + /get_file/18/7722d95db2bea6451792906ca750aa24b679c2abf4/36000/36245/36245.mp4/?br=1596&embed=true
Da fehlt am Ende aber das &rnd=xxxxxx
Das Problem ist, der rnd Wert, der im Quelltext zu sehen ist, funktioniert nicht. Wenn du den Netzwerkverkehr in der Browserkonsole beobachtest, siehst du, das beim Starten des Videos ein andere rnd Wert generiert wird, als der aus dem Quelltext. Und dieser rnd Wert hat 3 Ziffern mehr.

echterkevin
06.12.2020, 17:20
Richtig,

dann machen wir noch einen "Head" request auf diese url und bekommen die direkte URL zurück, Alle files liegen bei denen offen "ohne Schutz"


<?php
$video_id = isset($_SERVER['QUERY_STRING']) ? (int)$_SERVER['QUERY_STRING'] : '';
$html = file_get_contents('https://www.mangovideo.club/embed/'.$video_id);
$host = 'mangovideo.club';
if (strpos($html,"license_code:") !== false) {
$t1 = explode("license_code: '", $html);
$t2 = explode("'", $t1[1]);
$d = $t2[0];
$t1 = explode("function/0/", $html);
$t2 = explode("'", $t1[count($t1)-1]);
$orig = $t2[0];
$c = 16;

for ($f = "", $g = 1; $g < strlen($d); $g++)
{
$f.= preg_match("/[1-9]/", $d[$g]) ? $d[$g] : 1;
}

for ($j = intval(strlen($f) / 2) , $k = substr($f, 0, $j + 1) , $l = substr($f, $j) , $g = $l - $k, $g < 0 && ($g = - $g) , $f = $g, $g = $k - $l, $g < 0 && ($g = - $g) , $f+= $g, $f = $f * 2, $f = "" . $f, $i = $c / 2 + 2, $m = "", $g = 0; $g < $j + 1; $g++)
{
for ($h = 1; $h <= 4; $h++)
{
$n = $d[$g + $h] + $f[$g];
$n >= $i && ($n-= $i);
$m.= $n;
}
}

$t1 = explode("/", $orig);
$j = $t1[5];
$h = substr($j, 0, 32);
$i = $m;

for ($j = $h, $k = strlen($h) - 1; $k >= 0; $k--)
{
for ($l = $k, $m = $k; $m < strlen($i); $m++) $l+= $i[$m];
for (; $l >= strlen($h);) $l-= strlen($h);
for ($n = "", $o = 0; $o < strlen($h); $o++)
{
$n.= $o == $k ? $h[$l] : ($o == $l ? $h[$k] : $h[$o]);
}

$h = $n;
}

$link = str_replace($j, $h, $orig);
} else {
$link="";
}
$flash="direct";
/*
if ($link && $flash <> "flash")
$link=$link."|Origin=".urlencode("https://".$host);
echo $link;
*/

$ch = curl_init($link);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,5); // connect timeout
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // curl timeout
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);


$html = curl_exec($ch);
$redirectURL = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL );
curl_close($ch);

echo $redirectURL;

https://www.mangovideo.club/videos/32440/my-first-anal/

also 32440

ergibt dann https://183.mangovideo.pw/contents/videos/32000/32440/32440.mp4

Prototyp
06.12.2020, 17:40
Sehr geil. Das funktioniert. Fettes Danke!
Dann muss ich jetzt nur noch gucken, dass ich das irgendwie in Python umgewandelt bekomme.

echterkevin
06.12.2020, 17:45
Zur Not kleinen Webserver mit Php aufsetzen den Spaß als api nutzen 😄

Prototyp
06.12.2020, 18:37
Ja, so habe ich es gerade auch eingebunden.
Ich schaue mal nächste Woche, ob ich den Code dann übersetzen kann.
Das Addon basiert gerade eh noch auf Python 2, muss das dann noch für Kodi 19 in Python 3 umschreiben.

echterkevin
06.12.2020, 18:44
Wichtig ist ja dieser Part ab
$orig = $t2[0];
$c = 16;, quasi die dekodierung

Prototyp
11.12.2020, 00:51
So, hier dann der Python Code, falls noch jemand etwas damit anfangen kann / möchte.



import requests

res = requests.get('https://mangovideo.club/embed/36901')
html = res.text

if(html.find("license_code:") != -1):
t1 = html.split("license_code: '")
t2 = t1[1].split("'")
d = t2[0]
d1 = d.replace('0', '1')

f = d1[1:]

c = 16

t1 = html.split("function/0/")
t2 = t1[len(t1)-1].split("'")
orig = t2[0]

j = int(len(f) / 2)

k = int(f[0: j + 1])
l = int(f[j:])
g = l - k

if g < 0:
g = - g

f = g
g = k - l

if g < 0:
g = -g

f += g
f = int(f * 2)

f = "" + str(f)
i = int(c / 2) + 2
m = ""
g = 0
while g < j+1:
h = 1
while h <= 4:
n = int(d[g + h]) + int(f[g])
if n >= i:
n -= i
m = str(m) + str(n)
h = h + 1
g = g + 1

t1 = orig.split("/")
j = t1[5]

h = j[0:32]
i = m

j = h
k = len(h) - 1
while k >= 0:
l = k
m = k

i = str(i)
while m < len(i):
l = l + int(i[m])
m = m + 1

while l >= len(h):
l = l - len(h)

n = ""
o = 0
while o < len(h):
if o == k:
n = n + h[l]
else:
if o == l:
n = n + h[k]
else:
n = n + h[o]

o = o + 1

h = n

k = k - 1

link = orig.replace(j, h)

headers = {
"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13"
}

response = requests.get(link,headers=headers,stream=True,time out=20)

if response.history:
final_result = response.url
print(final_result)
else:
print("Request was not redirected")
else:
print('none. Link Not found.')