Autor Zpráva
besir
Profil
Zdravím Vás dobří lidé. Dosta lsem domácí úkol. Mam hotovo dejme tomu 95%. Ale zaboha nejsem schopný vymyslet toto:

V databázi mám tabulku mereni a sloupec id , id_keyword , g_pozice, s_pozice, stamp
Vysvětlení:

id - identifikace mereni ( myslim ze nebylo treba vysvetlovat, ale pro uplnost )
id_keyword - odkazuje na klicove slovo pro ktere toto mereni probihalo
g_pozice - namerena pozice na portalu google.cz
s_pozice - namerena pozice na portalu seznam.cz
stamp - cas kdy bylo mereni provedeno

A potřebuji toto: - jde mi spíše o pomoc vymyšlení jak na to, technickou sránku snad pak zvládnu.

Osa X ukazuje pozici v daném dnu. Osa Y ukazuje kdy v měsíci (pozor na to, že každý měsíc má jiný počet dnů). Mezi jednotlivými měsíci se dá překlekávat. Pokud je zobrazen aktuální měsíc, tak se nezobrazuje odkaz na „Následující měsíc“, pokud je zobrazen první měsíc s daty, pak se nezobarzuje odkaz „Předchozí měsíc“.

Zaboha nejsem schopen vymyslet princip jak to provést.
Všem tady moc děkuju za případnou pomoc.

PS: Tato statistika se má odesílat E-mailem ale být přístupná i z mnou již napsaného rozhraní. ( To ale zatím neřeším )
grimword
Profil
klasické stránkování? mohl bych ti dát jeden z mých skriptů, ale myslím že ti víc pomůže google a nějaký článek o principu stránkovaní
AM
Profil *
Nejdřív si udělej dvanáctimístné array, kde budeš mít dny v každém měsíci (31, 28, 31...). Za něj hoď nějakou podmínku, jestli není přestupný rok (pokud chceš být precizní, každý rok dělitelný čtyřmi mimo každý rok dělitelný stem ale nedělitelný 1000 - rok 2000 přestupný je, ale 1900, 2100, 2200... nejsou).
Pomocí myslímže mktime si převeď první vteřinu tohoto měsíce timestamp. Nazvěme to $begin.
Pak znásob počet dní v měsíci, který zobrazuješ, 86400. Přičti to k $begin. Nazvěme to $end.
Následně vyber z databáze všechny řádky WHERE stamp >= $begin AND stamp < $end.
Ejhle, máš měření na aktuální stránce.
Ověření, jestli je zadaný měsíc aktuální měsíc, ti snad psát nemusím.
Pak zjisti z databáze počet řádků, pro které stamp < $begin. (WHERE stamp < $begin LIMIT 1 - nepotřebujeme vědět, kolik, stačí, jestli existuje). Pokud existuje dřívější záznam, zobraz šipku "zpět".
besir
Profil
AM

Dekuji tohle je presne to co sem potreboval. Pochopil si me vinikajicne :-) Tet bohuzel nemam cas, ale v pondeli vecer na to mrknu a dam vedet jak to dopadlo. Zatim obrovske diky.
sir_besir
Profil *
Nevim proc, nejde mi se prihlasit, precizni bych chtel byt, ale jaksi sem nevymyslel jak sesmolit tu podminku na ten prestupnej rok. Na to je ma hlava asik kratka, nebo malo naucena. AM prosimte Tedy, pokud by se ti chtelo, mohl bys me este nakopnout k te podmince? Dekuji

btw: Vyber mam hotov a uz mam temer hotovo sestavovani grafu, co se obrazku tyce. Zatim diky.
AM_
Profil
pokud nepredpokladas, ze program pobezi jeste v roce 2100, staci:
$mesice = array(31, 28, 31 ...);
if (($rok % 4) == 0){
$mesice[1] = 29'
}
sir_besir
Profil *
Koukam ze nejsem komu nejde login, este jeden problem :-) Nechce se mi kuli tomu zakladat novy thread.

K tomuto grafu se bezprostředně váže skript pro zjištění pozice ve vyhledávači google. Zkoušel sem google stránku otevřít třemi způsoby, nejprve před DOMdokument, pak přes fopen ( chvili chodilo, pak me google tuto prektiku zatrhl ) a potom přes file_get_kontent, vclku sem se radoval pač to chodilo cca 14 dni. Jenže ejhle, už to taky nefunguje, bez jakichkoli uprav ve scriptu to přestalo chodit >>

$sql_vytazeni_slov = mysql_query("SELECT keywords.keyword, keywords.id, klient.url FROM keywords, klient WHERE klient.id = keywords.id_klient");
while ($sql_vysledek = mysql_fetch_assoc($sql_vytazeni_slov)) 
{

$keyword = str_replace(" ","%20", $sql_vysledek['keyword']);

$seznam_pocatek = 1;
$google_pocatek = 0;	
$seznam_pozice = 0;
$google_pozice = 0;
$seznam_vyskyt = 0;
$google_vyskyt = 0;	

while($seznam_pocatek < 32 and $google_pocatek < 31)
{
$seznam_zaznam_na_strance = 1;
$google_zaznam_na_strance = 1;


$seznam_adresa = "http://search.seznam.cz/?q=".$keyword."&pId=V5arhURTo-Df&count=10&from=".$seznam_pocatek;
$google_adresa = "http://www.google.cz/search?hl=cs&lr=&q=".$keyword."&start=".$google_pocatek."&sa=N";


$seznam_contents = @file_get_contents($seznam_adresa);
$google_contents = @file_get_contents($google_adresa);

$odstraneni_znaku = array("<b>", "</b>");

$seznam_rozdeleno = str_replace($odstraneni_znaku,"",explode('<table class="result"> <tr> <td class="lmt">', $seznam_contents));
$google_rozdeleno = str_replace($odstraneni_znaku,"",explode("<li class=g><h3 class=r>", $google_contents));



while($seznam_zaznam_na_strance != 11 and $seznam_vyskyt != 1)
{
	$seznam_pozice = $seznam_pozice + 1;

	if (substr_count($seznam_rozdeleno[$seznam_zaznam_na_strance], $sql_vysledek['url']) != 0 )
	{
		$seznam_vyskyt = 1;
	}
$seznam_zaznam_na_strance = $seznam_zaznam_na_strance + 1;

}
$seznam_pocatek = $seznam_pocatek + 10;


while($google_zaznam_na_strance != 11 and $google_vyskyt != 1)
{
	$google_pozice = $google_pozice + 1;
	if (substr_count($google_rozdeleno[$google_zaznam_na_strance], $sql_vysledek['url']) != 0 )
	{
		$google_vyskyt = 1;
	}
$google_zaznam_na_strance = $google_zaznam_na_strance + 1;

}
$google_pocatek = $google_pocatek + 10;
}
sleep(1); 
flush();

if ($seznam_vyskyt == 0)
{
	$seznam_pozice = 41;
}
if ($google_vyskyt == 0)
{
	$google_pozice = 41;
}


$sql_ulozeni_vysledku = "INSERT INTO mereni (id_keyword , g_pozice, s_pozice, stamp) VALUES ('".$sql_vysledek['id']."', ".$google_pozice.", ".$seznam_pozice.", ".time().")";

mysql_query($sql_ulozeni_vysledku);

}


Bádali jsme s kamarádem a narazili na Google API, jenže u přímého zápisu slov do get proměnné Google s naprostým klidem vynechá písmena s diakritikou. Zjistili jsme, že je "zchroustá" pokud je zapíšeme ve tvaru %uXXXX (XXXX je ASCII kód v hexadecimální soustavě), ale výsledky se liší od toho, co najde při vyhledávání z hlavní stránky.

<?php
function google_pos($address, $keyword, $lang) // URL webu, klíčové slovo, jazyk vyhledávání (cs,sk,en,pl,hu...)
{
// Nastaveni
$poscount = 40; // Počet prohledaných pozic

$pozice = "";
$kw = "";
$headerlang = $lang;
$lang = $lang == "" ? "" : "lang_" . $lang;
for($i=0;$i<strlen($keyword);$i++)
{
$char = substr($keyword, $i, 1);
$char = "%u00".dechex(ord($char));
$kw .= $char;
}
$keyword = $kw;
for($i=0;$i<$poscount;$i=$i+4)
{
$url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=" . $keyword . "&start=" . $i . "&lr=" . $lang . "";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept-Language: " . $headerlang . ""));
$var = curl_exec($ch);
$results = json_decode($var);
$count = count($results->{"responseData"}->{"results"});
if(($poscount-$i)<$count) $count = $poscount-$i;
for($j=0;$j<$count;$j++)
{
if(eregi($address, $results->{"responseData"}->{"results"}[$j]->{"unescapedUrl"}))
{
$pozice = $i+$j+1;
return $pozice;
exit;
}
}
}
return "0";
}
?>


Prot žádám jestli s tím máte někdo zkušenosti, nebo víte jak na to pomozte prosím.
sir_besir
Profil *
No tak google sem už také vyřešil. Děkuji všem co mě pomáhali a přeji hodně úspěchů.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: