Thread Im cgi-Script curl/wget von externer Website (19 answers)
Opened by MiLeREDE at 2022-04-09 15:51

GwenDragon
 2022-04-11 10:06
#194315 #194315
User since
2005-01-17
14754 Artikel
Admin1
[Homepage]
user image
Nun ja, ich würde CPAN:WWW::Mechanize nehmen um Inhalte von Webseiten aus zu lesen.

Oder CPAN:LWP und CPAN:HTML::Parser, um die VdieoIDs zu finden.
//EDIT: Oh, aber ich sehe gerade, die stecken dann im Javascript-Code der YT-Seite, welches HTML::Parser gar nicht auslesen kann.

Folgende Idee:
Quellcode der Seite mit LWP holen
Nach VideoIds per Regex suchen und die nacheinader in ein Perl-Array stecken
Dann kannst du die korrekte Reihenfolge der Videos bekommen

Habe jetzt gerade keinen Code parat. Vielleicht später.

Mein Ansatz daraus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl

use strict;
use warnings;
use 5.018;
use utf8;

use LWP::UserAgent;

my $url = 'https://www.youtube.com/channel/UC5YPvina0jntpfIkiHNIi6w';

my $ua = LWP::UserAgent->new();
$ua->agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36');
my $res     = $ua->get($url);
my $content = $res->content;

# Zu uniq von Array-Werten siehe https://perlmaven.com/unique-values-in-an-array-in-perl
my @unique = do {
  my %seen;
  grep { 
    !$seen{$_}++ 
  } 
  $content =~ m|"videoId":"([^"]+)"|g;
  # Ids in JSON "videoId":"Du8OyyaOgN4"
};

Ich habs nur grob getestet aus Zeitgründen.
Wie du ein Array durchlaufen musst, weißt du ja um das nächste zu finden, oder? ;-)
Und der Link auf Video hat dann ja die URL https://www.youtube.com/watch?v=HIERID
Ein bisschen musst du auch noch selbst tun, ich mag dir nicht den ganzen Scraper bauen, du darfst auch was lernen.

Editiert von GwenDragon: Code hinzugefügt, Regex korrigiert
Last edited: 2022-04-11 11:02:01 +0200 (CEST)

View full thread Im cgi-Script curl/wget von externer Website