Dynamische Links externer Websites in Statische umwandeln

Hi,

wir müssen an der Arbeit regelmäßig für Kunden Software installieren (dabei handelt es sich um Privat Kunden und Freie Software)

Da wir momentan dabei sind Lösungen zu finden die Aufgaben zeitlich zu optimieren würden wir gerne diese Tools per Knopfdruck installieren.

Dazu brauche ich aber eine Grundvorraussetzung:
Statische Links

Wir haben bereits ein Skript entwickelt, womit wir die verschiedenen Tools mit einem Klick auf den Desktop herunterladen können. Diese Tools haben jedoch Statische Links.

Wie aber realisiere ich das bei Seiten, welche dynamische Links haben, die sich täglich ändern? Unser Skript braucht einen Download-Link im Code (also irgendwas mit z.B. programm.exe am Ende) und nicht sowas wie z.B. “/programm/dl/26742345” wo sich die Zahl am Ende alle 24 Stunden ändert und somit der Link ungültig ist (unser Tool also dann nichtmehr funktioniert).

Im Endeffekt muss ja auf dem Server die Datei, die ich herunterladen möchte irgendwo vorhanden sein. Wie kann ich diese “extrahieren”, sodass ich einen direkten Link für mein Programm bekomme? Oder aber zumindest den sich täglich ändernen Link “festhalten”, dass ich einen Download Link bekomme, der immer gültig ist?

Das würde uns die Arbeit sehr erleichtern.

Vielleicht hat ja einer ne Idee.

Lg

Im Zweifelsfalle müßtest du die Personen fragen, die denselben Inhalt immer unter einer anderen URI zugänglich machen, ob die dir verraten, wie sich die URI zeitlich ändert, damit du das dann mit einem eigenen Skript nachvollziehen kannst und eventuell eine Weiterleitung bereitstellen.
Andererseits gibt es vielleicht einen Grund, warum der Inhalt nicht mit einer immer gleichen URI zugänglich ist, eventuell möchten die Anbieter ja gar nicht, daß der Kram automatisch ladbar ist, sondern nur von Menschen, die sich zuvor auf einer bestimmten Seite befunden haben, wo solch ein zeitlich befristeter Verweis drinsteht (ich habe auch einige Inhalte auf die Weise vor dem beliebigen Zugriff bewahrt, um unter anderem sicherzustellen, daß die Leute auch die dazu verfügbaren normalen XHTML-Ausgaben zur Kenntnis nehmen und nicht nur Dateien herunterladen).

[quote=".marco"]Hi,

wir müssen an der Arbeit regelmäßig für Kunden Software installieren (dabei handelt es sich um Privat Kunden und Freie Software)

Da wir momentan dabei sind Lösungen zu finden die Aufgaben zeitlich zu optimieren würden wir gerne diese Tools per Knopfdruck installieren.

Dazu brauche ich aber eine Grundvorraussetzung:
Statische Links

Wir haben bereits ein Skript entwickelt, womit wir die verschiedenen Tools mit einem Klick auf den Desktop herunterladen können. Diese Tools haben jedoch Statische Links.

Wie aber realisiere ich das bei Seiten, welche dynamische Links haben, die sich täglich ändern? Unser Skript braucht einen Download-Link im Code (also irgendwas mit z.B. programm.exe am Ende) und nicht sowas wie z.B. “/programm/dl/26742345” wo sich die Zahl am Ende alle 24 Stunden ändert und somit der Link ungültig ist (unser Tool also dann nichtmehr funktioniert).

Im Endeffekt muss ja auf dem Server die Datei, die ich herunterladen möchte irgendwo vorhanden sein. Wie kann ich diese “extrahieren”, sodass ich einen direkten Link für mein Programm bekomme? Oder aber zumindest den sich täglich ändernen Link “festhalten”, dass ich einen Download Link bekomme, der immer gültig ist?

Das würde uns die Arbeit sehr erleichtern.

Vielleicht hat ja einer ne Idee.

Lg[/quote]

naja wo issn da ein problem, du simulierst immer wieder mit nem anderen user agent einen user und folgst die links bis du zu dem download link kommst ließt ihn neu aus und öffnest den automatisch?!Allerdings sit sowas illegal und kann strafrechtliche folgen haben…

[quote=“netsplit”][]
naja wo issn da ein problem, du simulierst immer wieder mit nem anderen user agent einen user und folgst die links bis du zu dem download link kommst ließt ihn neu aus und öffnest den automatisch?!Allerdings sit sowas illegal und kann strafrechtliche folgen haben…[/quote]ah ja… Ok… nen Kopierschutz zu umgehen ist deutlich verboten… ich würde das aber nicht als solches bezeichnen^^ Zumal manche links einfach so dynamisch sind.

Und ja, auch mit denen klar zukommen ist einfach :wink: Kann man sogar via bash und wget automatisieren^^

(oder Python mit den 3rd party libraries requests und beautifulsoup)

[code]import requests
import bs4
from urllib.parse import urljoin

base_url = ‚http://forum.bplaced.net/viewtopic.php?f=10&t=25160

response = requests.get(base_url)
soup = bs4.BeautifulSoup(response.text)

for link in soup.findAll(‚a‘):
href = link.get(‚href‘, None)
if href is not None:
print(urljoin(base_url, href))

output:


http://forum.bplaced.net/
http://forum.bplaced.net/faq.php?sid=00aaa03efc4c57375395433a40da9c72
http://forum.bplaced.net/search.php?sid=00aaa03efc4c57375395433a40da9c72
http://forum.bplaced.net/memberlist.php?sid=00aaa03efc4c57375395433a40da9c72
http://forum.bplaced.net/ucp.php?mode=login&sid=00aaa03efc4c57375395433a40da9c72
http://forum.bplaced.net/ucp.php?mode=register&sid=00aaa03efc4c57375395433a40da9c72
http://forum.bplaced.net/ucp.php?mode=register&sid=00aaa03efc4c57375395433a40da9c72
…[/code]
(ich wollte nur mal ein bisschen Angeben, wo ich grad in einem anderen Thread über Python sprach)

mfg Balmung

Nicht schlecht balmung

hab mal dein beispiel genommen und es in php konventiert

function getUrls( $url ){

$content = file_get_contents( $url );

$document = new DOMDocument();

@$document->loadHTML($content);

$path = new DOMXPath($document);
$urls = $path->evaluate("/html/body//a");

for ($x = 0; $x < $urls->length; $x++) {
    $hrefs[$x] = $urls->item($x)->getAttribute('href');
}

return $hrefs;

}

G

[quote=“netsplit”] for ($x = 0; $x < $urls->length; $x++) {
$hrefs[$x] = $urls->item($x)->getAttribute(‘href’);
}[/quote]
Kann man nicht mit foreach über die Elemente direkt iterieren?

Außerdem:

Dieses “@” ist wirklich der letzte dreck… das PHP keine vernünftige Fehlerbehandlung hat ist auch so eine Sache die mich abgrundtief stört.

foreach ist halt langsamer… außerdem programmier ich auch deswgen nutze ich handelsübliche befehle.

Naja fehlerbehandlung in php ist wirklich ein chaos man kann sich zwar ein error handling bauen aber da geb ich dir recht das ist sehr aufwendig… und nicht unebdingt bequem , da gibts bessere alternativen als sprachen wo das besser umsetzen

Das ist doch blödsinnig. Du nutzt PHP und machst dir sorgen um Performance? :ps:

foreach ist handelsüblich.

Vor Performance sollte lesbarkeit und übersichtlichkeit kommen. Danach kann man immer noch optimieren.

„Jeder idiot kann Code schreiben, der von computern verstanden wird. Ein guter Programmierer schreibt Code der von Menschen verstanden werden kann.“ :wink:

foreach trägt schon deutlich zur Lesbarkeit bei.

Du findest Optimierung blöd? Verzichtest aber in deinen python code auf einer endlosschleife du du ja irgendwann abbrechen könntest?

Jedes CMS ist optimiert, jede Datenbank sollte optimiert gestaltet werden. Und warum sollte man for als unleserlich empfinden?

Versteh ich nicht so ganz…

Mit PHP gehts steil bergauf, wenn man bedenkt wie sich php3 geschlagen hat zu anderen scriptsprachen…

Endlosschleife? wat? Ich habe keinen Plan wovon du redest. In meinem Code gab es keine und ich sehe auch keine Möglichkeit dort eine Endlosschleife einzubauen, ohne den Code unleserlicher zu machen.

Ich habe nicht behauptet, Optimierung sei blöd oder unsinnig oder irgendwas anderes.

Ich habe gesagt, dass das Vermeiden von foreach gegenüber einer for-schleife lächerlich ist.
Die angeblichen Performance Einsparungen sind lächerlich und trivial.
Mit einem solchen Argument daherzukommen, als wäre es „die große Optimierung“ ist lächerlich.

Dass es mit PHP Bergauf geht ist mir klar. Das hat aber nichts zu bedeuten. Mit Python geht es schließlich auch Bergauf.

achja und was ist wenn eine webseite 10.000 urls drinstehen hat ?! ist dann deine foreach methode dann noch immer so toll?!

Jede Sekunde ist in webscripten wichtig…

Es macht keinen Unterschied. Der Flaschenhals in dem ganzen Szenario ist sicher nicht die Schleife, sondern wahrscheinlich eher das runterladen der Seite.
Du setzt deine Optimierungs-Prioritäten vollkommen falsch, wie mir scheint.

Es ist nicht so, dass es mich wirklich stört, wenn du for statt foreach nutzt, mich störte lediglich dein Argument warum du es nutzt.

also das PHP unschlagbar ist mag ich bezweifeln…
Wir nutzen zwar sehr selten anderes CGI wie perl und das ist auch gut, aber Python wird dennoch hier und da genutzt.
Ansonsten gibts aber NodeJS und das ist noch erst im kommen :wink:

Also es gibt schon Sachen die PHP irgendwann den rang ablaufen werden… unter Umständen :stuck_out_tongue:

Ansonsten ist allerdings ne foreach nicht unbedingt langsamer… in dem Fall u.U. zwar schon weil man nen index brauch (da nutze ich i.d.R. auch for) aber würde man diesen nicht brauchen, und man ändert die werte in der foreach variable nicht, ist foreach schneller.
Allerdings lasse ich Geschwindigkeit hier eh nicht gelten, sonst wäre es ++$i und nicht $i++ xD

Und netsplit… was die “endlos” loop betrifft… klar, manchmal wird es dadurch leserlicher, aber alleine in dem Fall aus Performance und auch Lesbarkeit, ist da ne for in Python schon richtig gewesen^^

Und das “jedes” CMS optimiert ist… halte ich für ein Gerücht nach dem ich den Source von einigen gesehen habe^^ Die könnten deutlich schneller arbeiten. Sieht man auch merkbar oft genug wenn dort zum teil Seiten mehrere Sekunden laden^^

[quote=“White-Tiger”]also das PHP unschlagbar ist mag ich bezweifeln…
Wir nutzen zwar sehr selten anderes CGI wie perl und das ist auch gut, aber Python wird dennoch hier und da genutzt.
Ansonsten gibts aber NodeJS und das ist noch erst im kommen :wink:

Also es gibt schon Sachen die PHP irgendwann den rang ablaufen werden… unter Umständen :stuck_out_tongue:

Ansonsten ist allerdings ne foreach nicht unbedingt langsamer… in dem Fall u.U. zwar schon weil man nen index brauch (da nutze ich i.d.R. auch for) aber würde man diesen nicht brauchen, und man ändert die werte in der foreach variable nicht, ist foreach schneller.
Allerdings lasse ich Geschwindigkeit hier eh nicht gelten, sonst wäre es ++$i und nicht $i++ xD

Und netsplit… was die “endlos” loop betrifft… klar, manchmal wird es dadurch leserlicher, aber alleine in dem Fall aus Performance und auch Lesbarkeit, ist da ne for in Python schon richtig gewesen^^

Und das “jedes” CMS optimiert ist… halte ich für ein Gerücht nach dem ich den Source von einigen gesehen habe^^ Die könnten deutlich schneller arbeiten. Sieht man auch merkbar oft genug wenn dort zum teil Seiten mehrere Sekunden laden^^[/quote]

Warum sollte php unschlagbar sein, wo hab ich das behauptet?! Und was perl angeht das spielt komplett in einer anderen liga als php. Dennoch hat sich PHP vor Perl gesetzt weils einfacher ist und große Projekte schneller gecodet sind (nur um den direkten vergleich zu ziehen ohne beachtung verschiedener Frameworks). Und zu Nodejs wo ist das bitte Serverseitig?! Aber hier ist ein Artikel wo darauf eingeht "http://wiki.webkicks.de/Serverseitig_/_clientseitig"
Irgendwie werden hier vergleiche gezogen die nicht entsprechend sind…
Mit ++$i geb ich dir Recht bei einer for schleife ist das weniger wichtig daher ist es schneller.
Ok bei dem “jedes” CMS geb ich dir auch Recht,normalerweise nutzt man ein anständiges CMS kein 0815.

Eine for in Python hab ich ja nicht behauptet das es falsch ist, ich wurde ja kritisiert das meine for falsch in php ist , warum auch immer… Und das es unleserlich sei, aber selbst verwendet man es in dem Python script. Wenn man kritisiert sollte man die Fakten einhalten…

[quote=“netsplit”][]
Warum sollte php unschlagbar sein, wo hab ich das behauptet?! [][/quote]Zitat: “Dass es mit PHP Bergauf geht ist mir klar”
Eigl. geht es eher bergab weil neue alternativen kamen :wink: Wenngleich PHP versucht seine Stellung zu halten in dem es endlich nen opcache eingebaut hat, für jeden^^

[quote=“netsplit”][] Und zu Nodejs wo ist das bitte Serverseitig?! Aber hier ist ein Artikel wo darauf eingeht “http://wiki.webkicks.de/Serverseitig_/_clientseitig
[][/quote]node.js ist Serverseitig :wink: Das is die einzige existens Grundlage^^ JS selbst ist dort der Server :stuck_out_tongue:
Und tut mir Leid das ich das so sage… aber das du mir weismachen willst ich wüsste nicht was Server- und Client-seitig ist, zeigt nur wie unwissend du bist^^ Zumindest ist es für mich, selbstverständlich und so gehe ich auch von anderen aus außer, diese geben mir berechtigte Zweifel. Allerdings kommt es selten vor das jemand der irgendwie programmiert/coded es nicht weiß.

[quote=“netsplit”][]
Eine for in Python hab ich ja nicht behauptet das es falsch ist, ich wurde ja kritisiert das meine for falsch in php ist , warum auch immer… [] aber selbst verwendet man es in dem Python script.[/quote]Die “for” [size=85](wie sie dort benutzt wurde)[/size] in Python wäre einer “foreach” in PHP gleich :wink:
Allerdings muss man sagen das Python auch keine gescheite “for” hat xD Wenn man wirklich von 0-10 zählen will, muss man mit “range(0,10)” nen Array erstellen was 0-10 beinhaltet… Dennoch ist die Performance nicht sooo schlecht… Mag aber daran liegen das Python insgesamt verhältnismäßig flott is.

Jedenfalls sollten wir diese Diskussion langsam beenden… [size=85](eigl. schnell da es schon viel zu lange geht und extrem off-topic ist. Geholfen hat es beim eigentlichen Problem nur recht wenig.)[/size]
Ich finde es vor allem witzig wie jemand mit einer relativ neutralen Haltung dennoch kritisiert wird^^ Schlimmer ist es eigl. nur wenn man jemandem zustimmt und dieser dennoch glaubt man würde gegenteiliges tun^^ Beides war hier der Fall :wink:

Vielleicht sollte die Diskussion in der ‘Gummizelle’ fortgeführt werden? ;o)

Ansonsten: Ganz klar fortran77, da bleibt einem Vieles erspart ;o) Aber als ich im letzten Jahrtausend noch ANSI-C verwendet habe (ich glaube, der web-server damals war auch noch das originale Programm von CERN), um dynamisch erzeugte Inhalte im Netz per CGI anzubieten, war auch nicht alles besser …

Einige bestimmt nützliche Dinge wie dies ‘->’ in PHP habe ich ansonsten noch nicht in der offiziellen Dokumentation erklärt gefunden, vielleicht auch ein Anzeichen dafür, daß man bei PHP eher mehr Zeit ins Aufräumen und Dokumentieren stecken sollte, statt in immer neue Funktionalitäten oder rückwärtsinkompatible Änderungen von bereits bekannten und oft genutzten Funktionen ;o)