simple HTML dom parser -> edit html
Ik heb een heel aantal html files waarvan ik 1 link moet wijzigen naar 1.wmv, 2.wmv , x-1.wmv. Dit wil ik graag automatiseren.
Om van iedere html file te weten waar ze nu naartoe verwijzen, gebruik ik de html dom parser ->http://simplehtmldom.sourceforge.net/
Deze toont voor iedere (in een loop doorloop ik iedere html file in een dir) html-file exact de link in de html file:
$html = file_get_html('hier komt de naam van de file');
// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';
Stel dat voor html file 1 de link: a.wmv is... wil ik deze wijzigen in 1.wmv
Uiteraard is dit puur een voorbeeld.
Hoe krijg ik dat echter voor elkaar? Ik kom er met de info op die site niet uit.
Alvast dank !
Om van iedere html file te weten waar ze nu naartoe verwijzen, gebruik ik de html dom parser ->http://simplehtmldom.sourceforge.net/
Deze toont voor iedere (in een loop doorloop ik iedere html file in een dir) html-file exact de link in de html file:
$html = file_get_html('hier komt de naam van de file');
// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';
Stel dat voor html file 1 de link: a.wmv is... wil ik deze wijzigen in 1.wmv
Uiteraard is dit puur een voorbeeld.
Hoe krijg ik dat echter voor elkaar? Ik kom er met de info op die site niet uit.
Alvast dank !
Op basis van wat ik vind in http://simplehtmldom.sourceforge.net/manual.htm
Misschien moet je voor je update_link functie iets met preg_replace doen, en misschien moet je niet alle <a>-elementen af gaan, maar alleen die in een bepaalde div, maar dit is de basis denk ik.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$html = file_get_html('hier komt de naam van de file');
// Find all links
foreach($html->find('a') as $element)
$element->href = update_link($element->href);
$html->save('naam van file');
function update_link($url)
{
// voorbeeldje. Hier kan je je eigen wijziging in zetten. Per link wordt die dan uitgevoerd
return 'x-' . $url;
}
?>
$html = file_get_html('hier komt de naam van de file');
// Find all links
foreach($html->find('a') as $element)
$element->href = update_link($element->href);
$html->save('naam van file');
function update_link($url)
{
// voorbeeldje. Hier kan je je eigen wijziging in zetten. Per link wordt die dan uitgevoerd
return 'x-' . $url;
}
?>
Misschien moet je voor je update_link functie iets met preg_replace doen, en misschien moet je niet alle <a>-elementen af gaan, maar alleen die in een bepaalde div, maar dit is de basis denk ik.
Gewijzigd op 12/09/2011 23:32:17 door Jelmer -
@jelmer,
Dank voor je hulp.
Voor jouw info: van iedere html file krijg ik 1 link terug. Ik zie de toegevoegde waarde niet van een functie?... is onderstaande info (wat nog geoptimaliseerd kan worden) wat je bedoelde qua oplossing?
$html = file_get_html('File1.html');//v.b. File1.html is de 1e file die ik wil wijzigen
foreach($html->find('a') as $element)
$movielink = $element->href; //levert bij file1.html -> a.wmv
$old = "a"; //via str_replace optimaliseer ik dat later..
$replacement = "1";
$linktomovie_newname = preg_replace($old, $replacement, $movielink);
$html->save('File1.html');
Dank voor je hulp.
Voor jouw info: van iedere html file krijg ik 1 link terug. Ik zie de toegevoegde waarde niet van een functie?... is onderstaande info (wat nog geoptimaliseerd kan worden) wat je bedoelde qua oplossing?
$html = file_get_html('File1.html');//v.b. File1.html is de 1e file die ik wil wijzigen
foreach($html->find('a') as $element)
$movielink = $element->href; //levert bij file1.html -> a.wmv
$old = "a"; //via str_replace optimaliseer ik dat later..
$replacement = "1";
$linktomovie_newname = preg_replace($old, $replacement, $movielink);
$html->save('File1.html');
Gewijzigd op 13/09/2011 22:11:47 door Michel Koonen
Als je maar 1 link hoeft te veranderen, dan is die foreach-lus niet eens nodig. En let op dat preg_replace regular expressions gebruikt, simpelweg "a" is niet goed genoeg. Voor str_replace wel natuurlijk. (Hint: zet error_reporting van PHP aan, dan zie je dit soort fouten meteen)
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$html = file_get_html('File1.html');//v.b. File1.html is de 1e file die ik wil wijzigen
if (($element = $html->find('a'))) // let op: dat is een assignment met opzet!
$element->href = str_replace("a", "1", $element->href);
$html->save('File1.html');
?>
$html = file_get_html('File1.html');//v.b. File1.html is de 1e file die ik wil wijzigen
if (($element = $html->find('a'))) // let op: dat is een assignment met opzet!
$element->href = str_replace("a", "1", $element->href);
$html->save('File1.html');
?>
PhpDOM leren gebruiken is ook de moeite waard.
@jelmer,
Dank !!! Ik heb het nu werkend :-)
Dank !!! Ik heb het nu werkend :-)




