Buna ziua, mi-a recomandat cineva acest forum. Ma puteti ajuta cu o sugestie, un sfat ?
Am creat un fisier .php cu ajutorul simpledom preiau link-urile dintr-o pagina pana aici totul merge ok, e minunat ! In acesata pagina am fisier .jpg si fisiere .rar , as vrea sa preiau doar fisierele jpg, cum as putea sa fac asta, avand in vedere ca link-urile sunt la fel si titlurile, adica aceleas div-uri…
iamntz
(Ionuț Staicu)
aprilie 25, 2016, 8:18am
2
Bine ai venit!
Nu am folosit simpledom (presupun că e ăsta ), dar eu aș face așa:
$rawUrl = $html->find('div', 0)->plaintext;
if( preg_match('/jp(e)?g/', pathinfo($rawUrl, PATHINFO_EXTENSION) ){
$url = $rawUrl;
}
1 Like
Sapioit
(Sapioit)
aprilie 25, 2016, 8:21am
3
TL;DR :
function startsWith($haystack, $needle) {
// search backwards starting from haystack length characters from the end
return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== false;
}
function endsWith($haystack, $needle) {
// search forward starting from end minus needle length characters
return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== false);
}
Si folosire:
startsWith("abcdef", "ab") -> true
startsWith("abcdef", "cd") -> false
startsWith("abcdef", "ef") -> false
startsWith("abcdef", "") -> true
startsWith("", "abcdef") -> false
endsWith("abcdef", "ab") -> false
endsWith("abcdef", "cd") -> false
endsWith("abcdef", "ef") -> true
endsWith("abcdef", "") -> true
endsWith("", "abcdef") -> false
Edit: Ar fi mai eficient daca ai oferi link spre acel simpledom, in cazul in care nu este cel mentionat de @iamntz , precum si link sau bucati de cod pentru site-ul din care vrei sa extragi.
1 Like
$rawUrl = $html->find('span[class=file-name]', 0)->plaintext;
if( preg_match('/jpeg/', pathinfo($rawUrl, PATHINFO_EXTENSION)) ){
$url = $rawUrl;
}
nu-mi mai da eroare, dar in schimb nu-mi selecteaza nimic :-?
iamntz
(Ionuț Staicu)
aprilie 25, 2016, 8:51am
5
Păi nici eu n-am auzit de simpledom. Asta nu înseamnă că nu există
http://php.net/pathinfo
„Nu funcționează” nu ajută. „Nu funcționează pentru că…” ar ajuta mai mult.
Ce valoare are $html->find('div', 0)->plaintext
?
ce returnează pathinfo($rawUrl, PATHINFO_EXTENSION)
?
Ai schimbat tag-urile din exemplul meu, da?
Ne poți da un exemplu concret cu ce ai făcut până acum si nu îți merge?
$target_url = 'site.com';
$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
$str= curl_exec($ch);
if (!$str)
{
echo "<br />cURL error number:" .curl_errno($ch);
echo "<br />cURL error:" . curl_error($ch);
exit;
}
$html= str_get_html($str);
$rawUrl = $html->find('span[class=file-name]', 0)->plaintext;
if( preg_match('/jpeg/', pathinfo($rawUrl, PATHINFO_EXTENSION)) ){
$url = $rawUrl;
}
echo $url;
$html->clear();
unset($html);
<li>
<span class="file-id center">1</span>
<span class="file-name">
<a title="Download devforum.jpeg" href="site.com/download/devforum.jpeg/1514366">
devforum.jpeg
</a>
</span>
<span class="file-date">24-04-2016</span>
<span class="file-size"> 8.9 MB </span>
<span class="file-downloads right">2</span>
</li>
Acesta este html-ul…
Cum adica ce valoare are ?
iamntz
(Ionuț Staicu)
aprilie 25, 2016, 9:46am
9
Adică dacă îi dai echo $rawUrl
ce afișează?
poate pentru ca tu ai pus: ‘/jpeg/ ’ in loc de ‘/jp(e)?g/ ’ ?
1 Like
iamntz
(Ionuț Staicu)
aprilie 25, 2016, 11:17am
11
Mariana_Angheluta:
$html= str_get_html($str);
$rawUrl = $html->find('span[class=file-name]', 0)->plaintext;
if( preg_match('/jpeg/', pathinfo($rawUrl, PATHINFO_EXTENSION)) ){
$url = $rawUrl;
}
echo $url;
Toată povestea asta ar cam trebui să fie într-un loop. Din ce îmi dau seama, $html->find('span[class=file-name]', 0)
acel zero înseamnă că vei avea doar primul span.file-name
(apropos, poți folosi selectori ca în css).
Sapioit
(Sapioit)
aprilie 25, 2016, 2:57pm
12
Poate asa?
$html = str_get_html($str);
$url = Array();
foreach($html->find('span[class=file-name]')->plaintext as $rawUrl)
if( preg_match('/jpeg/', pathinfo($rawUrl, PATHINFO_EXTENSION)) ){
$url[] = $rawUrl;
}
foreach ($url as $link)
echo $link;
foreach($html->find(‘span[class=file-name]’)->plaintext acesta imi da eroare si l-am lasat fara ->plaintext si apoi imi afiseaza gol…
Tin sa specific ca link-urile nu duc direct spre imagine sau arhiva… duc spre un alt link de unde se poate descarca imaginea.
iamntz
(Ionuț Staicu)
aprilie 26, 2016, 6:40am
16
În cazul ăsta, condiția ta va trebui să arate cam așa: preg_match('/jp(e)?g/', $rawUrl)
. Eventual poți extinde un pic regex-ul să faca match doar la jpg și ID.
Sapioit
(Sapioit)
aprilie 26, 2016, 7:34am
17
Again, ar fi mult mai eficient daca ai oferi link-uri. In cazul ala, iei toate link-urile si pentru fiecare in parte verifici daca are link-ul spre un jpeg sau nu.
Pe bune? Nu înțeleg ce-i așa de complicat…
<?php
require_once 'simple_html_dom.php';
$targetUrl = 'http://localhost/test/curl/sample.html';
$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)';
$request = curl_init();
curl_setopt($request, CURLOPT_USERAGENT, $userAgent);
curl_setopt($request, CURLOPT_URL, $targetUrl);
curl_setopt($request, CURLOPT_FAILONERROR, true);
curl_setopt($request, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($request, CURLOPT_AUTOREFERER, true);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_TIMEOUT, 50);
$response = curl_exec($request);
if (!$response) {
echo '<br />cURL error number:' . curl_errno($request);
echo '<br />cURL error:' . curl_error($request);
die();
}
$urls = array();
$html = str_get_html($response);
$links = $html->find('.file-name a');
foreach ($links as $a) {
if (preg_match('/\.jpe?g/', $a->href)) {
$urls[] = $a->href;
}
}
var_dump($urls);
?>
Dacă asta nu merge, atunci structura codului HTML este alta decât cea pe care ne-ai dat-o tu sau ai o problemă la preluarea datelor folosind cURL.
Ori revii și spui că a funcționat codul de mai sus, ori ne dai link-ul către pagina pe care vrei s-o parsezi, altfel nu faci nimic altceva decât să irosești timpul oamenilor de pe-aici…
EDIT
Am pus codul complet și testat.
5 Likes
pentru mp3 inloc de jpeg cum ar trebui sa fie ? jpe?g _> mp?3
Ar trebui să fie mp3 .
Semnul întrebării face e -ul opțional, astfel încât expresia regulată să accepte atât .jpeg cât și .jpg .
3 Likes