k0l3c Opublikowano 4 Maja 2012 Udostępnij Opublikowano 4 Maja 2012 Pobieram dane z plików i mam problem, ponieważ muszę z pliku "slowa.txt" wyciągnąć pierwszą linijkę i wysłać ją za pomocą "$rankings", wyświetlić wynik, wziąć kolejną linijkę i wyświetlić kolejny wynik, tak aby poprzedni nie znikał. (raczej nie znam php) Może mi ktoś pomóc? $plik = array_splice(explode("\n", file_get_contents('slowa.txt')), 0, 15); $domains = explode("\n", file_get_contents('domeny.txt')); foreach($plik as $a) { $keywords = array_splice(explode("\n", $a), 0, 1); $rankings = $rankingChecker->check($keywords, $domains); if(isset($rankings)){ echo '<table>'; foreach($rankings as $keyword => $domains){ echo '<tr><td>'; echo $keyword; echo '<td>'; foreach($domains as $domain => $count); echo '</td><td>'; echo $count; echo '</td></tr></table>'; } } } Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mion Opublikowano 4 Maja 2012 Udostępnij Opublikowano 4 Maja 2012 (raczej nie znam php)Wiec czas się uczyć PHP lub zaniechać korzystania z technologi której się NIE ZNA. Zainteresuj się funkcją https://php.net/manual/pl/function.file.php która wczyta dane z pliku linia po linii do tablicy array file ( string $nazwa_pliku [, int $flagi [, resource $kontekst ]] ) $arrMyArray = file('slowa.txt'); echo $arrMyArray[0]; // wyświetli pierwsza linię HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
k0l3c Opublikowano 4 Maja 2012 Autor Udostępnij Opublikowano 4 Maja 2012 Nie mogę tego zrobić w taki sposób, ponieważ klasa się wysypuje. A PHP się nauczę, jeżeli ten skrypt zacznie działać tj. chcę (a już niewiele brakuje) to będę miał dodatkowy motywator. Wiem, że nie powinienem pytać o gotowe rozwiązanie, ale.. Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mion Opublikowano 4 Maja 2012 Udostępnij Opublikowano 4 Maja 2012 Nie mogę tego zrobić w taki sposób, ponieważ klasa się wysypuje.Czego niby nie możesz zrobić w "taki sposób", co ci się wysypuje! Wiem, że nie powinienem pytać o gotowe rozwiązanie, ale..Dla ale i od gotowych rozwiązań jest dział ogłoszenia. HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
k0l3c Opublikowano 4 Maja 2012 Autor Udostępnij Opublikowano 4 Maja 2012 Fatal error: Uncaught exception 'Exception' with message 'Keywords array is no array' in /home/*/ftp/*.php:41 Stack trace: #0 /home/*/ftp/serp.php(36): RankingChecker->check('fraza...', Array) #1 {main} thrown in /home/*/ftp/*.php on line 41 public function check($keywords, $domains) { $rankings = array(); if (! is_array($keywords)) { throw new Exception('Keywords array is no array'); } if (! is_array($domains)) { throw new Exception('Domains array is no array'); } foreach($keywords as $keyword) { $keyword = trim($keyword); $rows = array(); Linia #36 (serp.php) $rankings = $rankingChecker->check($keywords, $domains); Linia #41 (*.php) if (! is_array($keywords)) { throw new Exception('Keywords array is no array'); } EDIT: Ostatecznie zrobiłem tak i chyba jest dobrze. Dane pobierane są przy pomocy APIKey i jak zbyt szybko/często/dużo stron sprawdzam, wysypuje się klasa, to przez ograniczenie API tak? for($i=0;$i<6;$i++) { require_once 'RankingChecker.php'; $apiKey = 'ABQIAAAAndS1uwoKaRBeH3G8t0r8TRTYwegu89VIXJ2f05MyffQAVftSahQlDY5B54QvxvHXUfFY AQwC1M_bJw'; $rankingChecker = new RankingChecker($apiKey); $rankingChecker->setLocale('pl', 'pl'); $domains = explode("\n", file_get_contents('domeny.txt')); $arrMyArray = file('slowa.txt'); $rankings = $rankingChecker->check(array($arrMyArray[$i]), $domains); if(isset($rankings)){ echo '<table>'; foreach($rankings as $keyword => $domains){ echo '<tr><td>'; echo $keyword; echo '<td>'; foreach($domains as $domain => $count); echo '</td><td>'; echo $count; echo '</td></tr></table>'; } } } Tak się wysypuje Notice: Trying to get property of non-object in /home/vanter/ftp/RankingChecker.php on line 56Warning: array_merge() [function.array-merge]: Argument #2 is not an array in /home/vanter/ftp/RankingChecker.php on line 56 Notice: Trying to get property of non-object in /home/vanter/ftp/RankingChecker.php on line 56 A to ta linika: 54 if ($result = file_get_contents($url)) { 55 $result = json_decode($result); 56 $rows = array_merge($rows, $result->responseData->results); 57 } Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mion Opublikowano 4 Maja 2012 Udostępnij Opublikowano 4 Maja 2012 Wszystkie funkcje do obsługi tablic w PHP jak i same tablice są dokładnie opisane https://www.php.net/manual/en/language.types.array.php https://www.php.net/manual/en/function.array.php więc zamiast wklejać tu swoje kody które i tak nic nie mówią zacznij je analizować. +++++++ Ten wpis $rankings = $rankingChecker->check(array($arrMyArray[$i]), $domains); jest błędny >> array($arrMyArray[$i]) HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
k0l3c Opublikowano 5 Maja 2012 Autor Udostępnij Opublikowano 5 Maja 2012 Napisałem cały skrypt od nowa i ogólnie działa dobrze, pozycje się zgadzają itd. Problemy zaczynają się jak na stronie jest dużo mapek i są na samym początku. Przy jednych frazach są mapki za jakimś organikiem i skrypt je pomija, a przy niektórych się gubi. Już wiem dla czego (ustawiłem zakres szukania do 10 linków na stronie). Jak przerobić przeszukiwanie aby pomijać mapki? czy jakoś inaczej da się to rozwiązać? W tej chwili mam tak: preg_match_all('/<h3 class="r"><a href="(.+?)"/',$serpy,$wyniki); Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Razjer Opublikowano 6 Maja 2012 Udostępnij Opublikowano 6 Maja 2012 Napisałem cały skrypt od nowa i ogólnie działa dobrze, pozycje się zgadzają itd.Problemy zaczynają się jak na stronie jest dużo mapek i są na samym początku. Przy jednych frazach są mapki za jakimś organikiem i skrypt je pomija, a przy niektórych się gubi. Już wiem dla czego (ustawiłem zakres szukania do 10 linków na stronie). Jak przerobić przeszukiwanie aby pomijać mapki? czy jakoś inaczej da się to rozwiązać? W tej chwili mam tak: preg_match_all('/<h3 class="r"><a href="(.+?)"/',$serpy,$wyniki); Da się, musisz zrobić wyrażenie regularne, które usunie wszelkie pozycje listy, które zawierają https://maps.google Dalej już powineneś sobie poradzić, skoro udało ci się zrobić powyższe wyrażenie regularne. --------------Dno jest wtedy,kiedy nie ma juz nawet mułu.-------------------- Turystyka na sprzedaż , Podróże małe i duże, Egipt, Turcja, Tunezja, Chorwacja... Poszukuję zatrudnienia. Będzie bez linka a co poezjapozycjonowania(kropka)blogspot(kropka)com NEW!!! - Blask Serpów (Prolog) W przygotowaniu: Chapter 1 - Blask Serpów Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
k0l3c Opublikowano 6 Maja 2012 Autor Udostępnij Opublikowano 6 Maja 2012 Problem polega na tym, że dane, które wyciągam nie mają zbytnio różnic. Powiedzmy, że jest 8 map na tej stronie, a tak wyglądają dwa linki, które w rzeczywistości są mapami: (po przefiltrowaniu teraźniejszym preg_match_all) [2] => /url?q=https://www.autoserwiswroclaw.pl/&sa=U&ei=DKmmT5v_LMX-8gOC6ODtBA&ved=0CCAQFjAB&usg=AFQjCNGksbh7sLYvZ826CNxkWUU8hFpU_Q [3] => /url?q=https://maps.google.pl/maps/place%3Fhl%3Dpl%26num%3D10%26um%3D1%26ie%3DUTF- Wyraźną różnicę między organikami i mapami jest to, że te drugie mają dodatkowo tabelę. Ale musiałbym w wyrażeniu wziąć pod uwagę znacznie szerszy zakres. Serpy ściągam przy pomocy implode. A tak wyglądają normalnie: Mapka: <li class="g"> <h3 class="r"><a href="/url?q=https://www.dabrowscy.wroclaw.pl/&sa=U&ei=jKqmT7urEsSz8QOv9c2NBQ&ved=0CC8QFjAG&usg=AFQjCNGxkfptE6zpMa40cBU6Po5kd-I9Dw">D?BROWSCY - Lakiernictwo, Blacharstwo, Mechanika, Ob?suga Flot</a></h3> <div class="s"><br> <div><cite>www.dabrowscy.<strong>wroclaw</strong>.pl/</cite> <span class="flc">- <a href="/search?hl=pl&q=related:https://www.dabrowscy.wroclaw.pl/+warsztat%2Bsamochodowy%2Bwroc%25C5%2582aw&num=10&sa=X&tbo=1">Podobne</a></span></div> </div> <table width="100%"> <tr> <td width="24" valign="top" class="c17"><img src="/mapfiles/iconG.png" alt="** PLEASE DESCRIBE THIS IMAGE **"></td> <td width="485" valign="top" class="c19"><span class="c18">Paczkowska 26, Wroc?aw<br> <span class="nobr" dir="ltr">71 367 42 71</span></span></td> <td valign="top" class="c22"> <div class="star c20">.</div> <div class="c21"><a class="fl nobr" dir="ltr" href="https://maps.google.pl/maps/place?hl=pl&num=10&um=1&ie=UTF-8&q=warsztat+samochodowy+wroc%C5%82aw&fb=1&gl=pl&hq=warsztat+samochodowy&hnear=0x470fe9c2d4b58abf:0xb70956aec205e0f5,Wroc%C5%82aw&cid=9936414930483148512">1 recenzja</a></div> </td> </tr> </table> </li> Organik: <li class="g"> <h3 class="r"><a href="/url?q=https://zadi.wroclaw.pl/&sa=U&ei=jKqmT7urEsSz8QOv9c2NBQ&ved=0CDIQFjAH&usg=AFQjCNGy_jGuABCsZGNeBO73MPKY6WQx7A"><strong>Warsztat samochodowy Wroc?aw</strong> ZADI Sp. z o.o. Blacharstwo <strong>...</strong></a></h3> <div class="s">Motocykle to hobby dla odwa?nych. Pasjonaci jedno?lad?w dok?adaj? wielu<br> stara?, by ich pojazdy l?ni?y na drogach i zapiera?y dech w piersiach. W naszym <strong>...</strong><br> <div><cite>zadi.<strong>wroclaw</strong>.pl/</cite> <span class="flc">- <a href="//webcache.googleusercontent.com/search?hl=pl&q=cache:Sydt1v5W3iMJ:https://zadi.wroclaw.pl/%2Bwarsztat%2Bsamochodowy%2Bwroc%25C5%2582aw&num=10&ct=clnk">Kopia</a> - <a href="/search?hl=pl&q=related:https://zadi.wroclaw.pl/+warsztat%2Bsamochodowy%2Bwroc%25C5%2582aw&num=10&sa=X&tbo=1">Podobne</a></span></div> </div> </li> Szukać w stronę tych tabel? czy macie jakiś lepszy pomysł? Chyba że da się zacząć przeszukiwanie od fragmentu "Więcej wyników w pobliżu", albo uciąć stronę do tego miejsca. Tylko jak? Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Razjer Opublikowano 6 Maja 2012 Udostępnij Opublikowano 6 Maja 2012 Zakładam, że radzisz sobie z curlem i masz pobraną stronę serpów. W poniższym przypadku to zmienna output. $zap='/\<ol\>.*?\<\/ol\>/s'; preg_match($zap,$output,$out); $output=$out[0]; Potem sobie wybierasz pkt listy: $zap='/\<li class/=\"g\"\>.*?\<\/li\>/'; preg_match_all($zap, $output, $matches); i w tablicy $matches powineneś mieć organiki + mapki Potem powineneś dołożyć to pponiżej w celu odfiltrowania wyników organicznych od mapek: foreach($matches as $wrzut) { $lb=substr_count($wrzut,"class=\"lupin"); if($lb==0){$organiki[]=$wrzut;} } Potem pozostaje przefiltować tablicę organiki w poszukiwaniu adresu naszego sajtu. Nie wiem czy gdzieś się nie pogubiłem pisałem z palca --------------Dno jest wtedy,kiedy nie ma juz nawet mułu.-------------------- Turystyka na sprzedaż , Podróże małe i duże, Egipt, Turcja, Tunezja, Chorwacja... Poszukuję zatrudnienia. Będzie bez linka a co poezjapozycjonowania(kropka)blogspot(kropka)com NEW!!! - Blask Serpów (Prolog) W przygotowaniu: Chapter 1 - Blask Serpów Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
k0l3c Opublikowano 6 Maja 2012 Autor Udostępnij Opublikowano 6 Maja 2012 Tutaj nie użyłem curla do pobrania strony google, tylko implode. (dopiero się uczę php i tak było wygodniej) Nie ogarniam wyrażenia regularnego do wyciągnięcia całej klasy. ;/ A pobraną stronę z google mam w $serpy, nie rozumiem też do której zmiennej Twojego kodu miałbym dać wyniki? Tzn. która z Twoich zmiennych to mój $serp? Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Razjer Opublikowano 6 Maja 2012 Udostępnij Opublikowano 6 Maja 2012 Tutaj nie użyłem curla do pobrania strony google, tylko implode. (dopiero się uczę php i tak było wygodniej)Nie ogarniam wyrażenia regularnego do wyciągnięcia całej klasy. ;/ A pobraną stronę z google mam w $serpy, nie rozumiem też do której zmiennej Twojego kodu miałbym dać wyniki? Tzn. która z Twoich zmiennych to mój $serp? $serp <=> $output na początku --------------Dno jest wtedy,kiedy nie ma juz nawet mułu.-------------------- Turystyka na sprzedaż , Podróże małe i duże, Egipt, Turcja, Tunezja, Chorwacja... Poszukuję zatrudnienia. Będzie bez linka a co poezjapozycjonowania(kropka)blogspot(kropka)com NEW!!! - Blask Serpów (Prolog) W przygotowaniu: Chapter 1 - Blask Serpów Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
k0l3c Opublikowano 6 Maja 2012 Autor Udostępnij Opublikowano 6 Maja 2012 Niestety, brak wyników. Pewnie wyrażenie się nie zgadza z zawartością $serpy ;/ Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Razjer Opublikowano 6 Maja 2012 Udostępnij Opublikowano 6 Maja 2012 Niestety, brak wyników. Pewnie wyrażenie się nie zgadza z zawartością $serpy ;/ Jutro odpalę to na localhoście i zobacze co i jak bo dzisiaj nie mam głowy do tego. Ps. Dziel i rządź. echo plus print_r dla wyników działań i popatrz jak po kolei przebiega odsiew i gdzie ci znikają wyniki . $zap='/\<ol\>.*?\<\/ol\>/s'; preg_match($zap,$serpy,$out); //tylko tu wstawiasz $serpy, dalej przetwarza na zmiennej $output i $out $output=$out[0]; Potem sobie wybierasz pkt listy: $zap='/\<li class/=\"g\"\>.*?\<\/li\>/'; preg_match_all($zap, $output, $matches); i w tablicy $matches powineneś mieć organiki + mapki Potem powineneś dołożyć to pponiżej w celu odfiltrowania wyników organicznych od mapek: foreach($matches as $wrzut) { $lb=substr_count($wrzut,"class=\"lupin"); if($lb==0){$organiki[]=$wrzut;} } --------------Dno jest wtedy,kiedy nie ma juz nawet mułu.-------------------- Turystyka na sprzedaż , Podróże małe i duże, Egipt, Turcja, Tunezja, Chorwacja... Poszukuję zatrudnienia. Będzie bez linka a co poezjapozycjonowania(kropka)blogspot(kropka)com NEW!!! - Blask Serpów (Prolog) W przygotowaniu: Chapter 1 - Blask Serpów Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
k0l3c Opublikowano 6 Maja 2012 Autor Udostępnij Opublikowano 6 Maja 2012 Teoretycznie /<li class="g"><h3 class="r">([^]*)</li>/ powinno załatwić sprawę ale tak nie jest ;/ Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Zarchiwizowany
Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.