Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Externen Javascript Link per PHP aufrufen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Externen Javascript Link per PHP aufrufen


 
innocent_judas
12-04-2007, 22:07 
 
Hallo zusammen,

Problem :
Ich möchte mehrere Seiten Html-Code mit file_get_contents($url) auslesen.

Die Seiten sind aber per Javascript folgendermaßen untereinander verlinkt was mich daran hindert den Befehl file_get_contents($url) anzuwenden :( :

Am besten ihr schaut euch das Ganze unter Myspace Friendlist (http://friends.myspace.com/Modules/ViewFriends/FriendsView.aspx?%3ffuseaction=user.viewfriends&friendID=114446263) an.

<a href="javascript:__doPostBack('ctl00$cpMain$pagerTop','1')">1</a>

Die dazugehörige Javascript Funktion sieht folgendermaßen aus :

<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDw[ Endlos langer String]" />
</div>

<script type="text/javascript">
<!--
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
// -->
</script>

Ich möchte nun die anderen Seiten auch mit file_get_contents($url) auslesen und möchte dazu gerne wissen wie ich den javascript Link umgehen kann. Hat jeman 'nen Plan ?


Wozu das alles :
Ich möchte gerne meine "Friendlist" auf MySpace.com per PHP auslesen und dann die so erhaltenen Daten neu sortieren und die ganzen Photos und dazugehörigen Links in eine Art Mosaikform unterbringen.

 
onemorenerd
12-04-2007, 22:14 
 
Bitte Code umbrechen!

Der Klick auf diesen Link bewirkt das Ändern der Werte der ersten beiden Inputs und das Abschicken des Formulars. Wenn es ein GET-Formular ist, kannst du nach ein wenig Stringspielerei weiter file_get_contents() benutzet. Für ein POST-Formular wirds so nicht gehen. Da mußt du den POST-Request nachbauen.

 
innocent_judas
13-04-2007, 00:54 
 
Vielen Dank für die schnelle Antwort. Es handelt sich um eine POST - Formular. Der gesamte <form> - Tag sieht folgendermaßen aus.

<form name="aspnetForm" method="post"
action="FriendsView.aspx?%3ffuseaction=user.viewfriends&amp;friendID=114446263"
onkeypress="javascript:return WebForm_FireDefaultButton(event, 'ctl00_cpMain_btnSearch')" id="aspnetForm">

<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDw[ Endlos langer String]" />
</div>

<script type="text/javascript">
<!--
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
// -->
</script>

[... jede Menge anderer Code ...]

</form>

Aufgerufen wird das Ganze mit :

<a href="java script:__doPostBack('ctl00$cpMain$pagerTop','1')">1</a>


Das wird meine erste POST - Request Simulation :rocks:

Ich hoffe mal, das wird nicht allzu schwierig. Aber mit folgendem Standardcode sollte ich eigentlich auf dem richtigen Weg sein.

Mit diesem Versuch erhalte ich aber als Rückgabewert $x immer noch Seite 1 der "Friendlist" und nicht wie erwartet Seite 3 (__EVENTARGUMENT=3).

Irgendetwas mach ich also falsch. Probleme macht meiner Meinung nach diese __VIEWSTATE Variabe. Bitte um Hilfe.

<?php

function PostToHost($host, $path, $referer, $data_to_send) {
$fp = fsockopen($host, 80);
printf("Open!\n");
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data_to_send) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data_to_send);
printf("Sent!\n");
while(!feof($fp)) {
$res .= fgets($fp, 128);
}
printf("Done!\n");
fclose($fp);

return $res;
}

$data = "__EVENTTARGET=ctl00$cpMain$pagerTop&__EVENTARGUMENT=3&__VIEWSTATE=/w[... Endlos langer String ...]";

printf("Go!\n");
$x = PostToHost(
"friends.myspace.com",
"/Modules/ViewFriends/FriendsView.aspx?%3ffuseaction=user.viewfriends&friendID=114446263",
"http://friends.myspace.com/Modules/ViewFriends/FriendsView.aspx?%3ffuseaction=user.viewfriends&friendID=114446263",
$data
);
?>

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:38 Uhr.