Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: parsowanie strony / mod_rewrite
Forum PHP.pl > Forum > PHP
zukowskp
Witam,
mam taki problem. Troche juz na ten temat czytalem choc wyraznie jeszcze za malo i chcialem poeksperymentowac na wlasna reke.
Utworzylem na serwerze plik index.php
CODE
function grab($url) {
$user_agent = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
$ch = curl_init();

$headadd=array("Accept: image/gif","Accept-Language: pl");
curl_setopt($ch, CURLOPT_URL, $url);
if ($ip!=""){
curl_setopt($ch, CURLOPT_INTERFACE);
}

curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headadd);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);

$result = curl_exec($ch);
$info = curl_getinfo($ch);
$code = $info['http_code'];
return $result;

}

$result = grab('http://encyklopedia.interia.pl');

preg_match_all("/onMouseOut=\"window.status='\'; return true;\"
class=\"ht\">([A-z0-9 \-]+)<\/a>/",$result,$domena);

print_r($result);

?>

oraz .htaccess
CODE
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^index.html$ index.php [L]
RewriteRule ^haslo-([^-]+)-([^-]+).html$ haslo?hid=$1&kid=$2 [L]
RewriteRule ^(.*).html$ litery?l=$1 [L]
RewriteRule ^(.*).html$ katalog?kid=$1 [L]
RewriteRule ^pk([^-]+)ih([^-]+)kid([^-]+).html$ katalog?kid=$3&pk=$1&ih=$2 [L]


zas wyniki nie sa zachwycajace dla mnie.
chodzi mi o to ze chcialbym wyciagnac tylko ciag takich znakow:
A B C D E F G H I J K L Ł M N O P R S T U W Z

z dzialajacymi linkami.

czy uzaleznione to jest od ciagu znakow w preg_match_all ?
Babcia@Stefa
Jak nie umiesz wyrażeniami to uzyj explode()" title="Zobacz w manualu PHP" target="_manual winksmiley.jpg
webdice
  1. <?php
  2. preg_match_all ('#<a href="/litery?l=([A-Z])" class="km"><b>([A-Z])</b></a>#', $result, $domena);
  3. ?>


Wszystko masz w tablicy domena, linki sobie stworzysz na bazie w/w tablicy.

EDIT: Poprawiłem kod.
zukowskp
@webdicepl
zastosowalem sie do Twoich wskazowek, poprawilem preg_match_all oraz dopisalem reszte kodu i wyglada to mniej wiecej tak:
CODE
function grab($url,$ip) {
$user_agent = "User-Agent: Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)";
$ch = curl_init();

$headadd=array("Accept: image/x-xbitmap, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/msword,
*/*","Accept-Language: pl");
curl_setopt($ch, CURLOPT_URL, $url);
if ($ip!=""){
curl_setopt($ch, CURLOPT_INTERFACE, $ip);
}

curl_setopt($ch, CURLOPT_URL, "http://encyklopedia.interia.pl");
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headadd);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);

$result = curl_exec($ch);
$info = curl_getinfo($ch);
$code = $info['http_code'];
return $result;

}

$result = grab('http://encyklopedia.interia.pl','');


preg_match_all ('<a href="/litery?l=([A-Z])" class="km"><b>([A-Z])</b></a>', $result, $domena);



//print_r($domena);
//print_r($array);

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Encyklopedia</title>
<META http-equiv="Content-Language" content="pl">
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>

<!-- Begin Wrapper -->
<div id="wrapper">
<!-- Begin Header -->
<div id="header">
<h1>Spis tematyczny: </h1><br /><br /><br />
<h2>Wybierz litere: <a href="/litery-A.html" class="km"><b>A</b> </h2>



<!-- End Header -->
<!-- Begin Strap -->

<div id="strap">



</div>

<!-- End Strap -->
<!-- Begin Navigation -->
<div id="navigation">
<ul id="menu">
<li><a href="index.html">Strona główna:</a></li>
</ul>
</div>
<!-- End Navigation -->
<!-- Begin Content-->
<div id="content">





</div>
<!-- End Content -->
<!-- Start Footer -->
<div id="footer">
<p></p>
</div>
<!-- End Footer -->
</div>
<!-- End Wrapper -->

</body>
</html>



.htaccess
CODE
Options +FollowSymLinks
RewriteEngine On

RewriteRule ^index.html$ index.php [QSA,L]
RewriteRule ^litery-([^-]+).html$ litery?l=$1 [QSA,L]
RewriteRule ^haslo-([^-]+)-([^-]+).html$ haslo?hid=$1&kid=$2 [QSA,L]
RewriteRule ^katalog([^-]+).html$ katalog?kid=$1 [QSA,L]
RewriteRule ^pk([^-]+)ih([^-]+)kid([^-]+).html$ katalog?kid=$3&pk=$1&ih=$2 [QSA,L]

narazie chcialem przypisac tylko 1 link dlatego jest tylko literka A, ale wciaz nie dzialaja linki, czy musze cos zdefiniowac dodatkowo?

wynik: hxxp://zukowski.info/test

co do pliku index.html to dziala (mam na mysli mod_rewrite)
webdice
Kod
RewriteRule ^litery-([^-]+).html$ litery?l=$1 [QSA,L]


Odwołujesz się do pliku litery, a on nie istnieje.
zukowskp
mam jeszcze jedno pytanie w sumie podobna sytuacja ale mysle ze juz prawie jestem na mecie smile.gif albo o czyms zapomnialem tiredsmiley.gif

index.php
Kod
$domena=$_SERVER['SERVER_NAME'];

$literka=htmlspecialchars($_GET['literka']);
$imie=htmlspecialchars($_GET['imie']);
$tekst=htmlspecialchars($_GET['tekst']);

if($literka AND $imie=="" AND $tekst=="") { $podstrona="$literka/"; }
if($imie AND $literka=="" AND $tekst=="") { $podstrona="$imie/"; }
if($imie AND $tekst AND $literka=="") { $podstrona="$imie/$tekst"; }

$ch = curl_init("http://imiennik.info/$podstrona");
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.14');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$strona=curl_exec($ch);
curl_close($ch);

//print_r($tresc);

preg_match('[</h1>(.+?)<span style="color:black;]is',$strona,$a);
$tresc=$a[1];
if($tresc=="") {
preg_match('[</h1>(.+?)<td>]is',$strona,$b);
$tresc=$b[1];
}
preg_match('[<h1>(.+?)</a> &raquo;(.+?)</a> &raquo;(.+?)</a> &raquo;(.+?)</h1>]is',$strona,$c);
$tytul=$c[1];

if($literka AND $imie AND $tekst=="") {
$tresc=str_replace ('<a href="', '<a href="'.$literka.','.$imie.',', $tresc);
$tresc=str_replace ('.php" title="', '.html" title="', $tresc);
}

if($literka AND $imie=="" AND $tekst=="") {
$tresc=str_replace ('<a href="', '<a href="'.$literka.',', $tresc);
$tresc=str_replace ('/" title="', '.html" title="', $tresc);
}


mam jeszcze problemy z preg_match, czy moglbym prosic o pomoc czemu jeszcze mi to nie dziala dobrze?

Kod
Options +FollowSymLinks
  RewriteEngine On
  
  RewriteRule ^index.html$ index.php [QSA,L]
  RewriteRule ^(.*).html$ index.php?literka=$1 [QSA,L]
  RewriteRule ^(.*).html$ index.php?imie=$1 [QSA,L]

wynik: hxxp://zukowski.info/imiona
webdice
Może napisz co Ci nie działa?
zukowskp
linki juz chodza ale nie wyswietla mi zawartosci linkow :S

wyzej poprawilem jeszcze kod
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.