Skocz do zawartości

[php] Kilka wartości dla jednej zmiennej


k0l3c

Rekomendowane odpowiedzi

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>';

  }
}
}

penguins.jpg

Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto ;)

Odnośnik do komentarza
Udostępnij na innych stronach

(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

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..

penguins.jpg

Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto ;)

Odnośnik do komentarza
Udostępnij na innych stronach

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

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 56

Warning: 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					}

penguins.jpg

Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto ;)

Odnośnik do komentarza
Udostępnij na innych stronach

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

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);

penguins.jpg

Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto ;)

Odnośnik do komentarza
Udostępnij na innych stronach

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 :P

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 :D

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

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?

penguins.jpg

Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto ;)

Odnośnik do komentarza
Udostępnij na innych stronach

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 :D

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

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?

penguins.jpg

Odwiedzaj regularnie mój blog o seo na lukaszt.pl podobno warto ;)

Odnośnik do komentarza
Udostępnij na innych stronach

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 :D

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

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 :D

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

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności