Arhiva

Archive for the ‘Unelte SEO in PHP’ Category

Citire GMAIL fara IMAP cu PHP

August 18, 2010 Lasă un comentariu

Iata o metoda cum poti detecta prin PHP daca ai mesaje necitite in mailboxul de la GMAIL.
Cum observati aceasta metoda nu necesita IMAP.


<?php
$username = "myuser";
$password = "mypass";

// Initialise cURL
$c = curl_init('https://gmail.google.com/gmail/feed/atom');

$headers = array(
 "Host: gmail.google.com",
 "Authorization: Basic ".base64_encode($username.':'.$password),
 "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4",
 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
 "Accept-Language: en-gb,en;q=0.5",
 "Accept-Encoding: text",
 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7",
 "Date: ".date(DATE_RFC822)
);

curl_setopt($c, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($c, CURLOPT_COOKIESESSION, true);
curl_setopt($c, CURLOPT_HTTPHEADER, $headers);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($c, CURLOPT_UNRESTRICTED_AUTH, 1);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 1);


$str = curl_exec($c);
echo $str;

curl_close($c);
?>

Anunțuri

Program semi-automat de inscriere in directoare

Aprilie 2, 2010 Lasă un comentariu

Dupa o munca de aproximativ 5 saptamani (cu 3-4 ore de munca zilnic) am terminat dezvoltarea programului „Smarty Directory Submitter„. Este o unealta de inscriere in directoare semi automata, care pe langa de a completa toate campurile necesare, mai si sugereaza/alege categoria unde sa fie inscris site-ul, alege tipul linkului (free+fara link reciproc).

Programul contine 500+ de directoare romanesti si 2000+ in engleza, categorizate. Se pot face o gramada de filtrari, editari, etc.

Nu o sa scriu foarte multe despre program aici. Il puteti descarca si testa pe gratis:
http://smarty-directory-submitter.com

Yahoo contact importer, si multe altele – PHP

Ianuarie 29, 2010 1 comentariu

Integrarea unui contact importer/invitation sender in cadrul unui site, poate ajuta foarte mult in promovare acestuia.

Daca ne gandim la portaluri mari gen: facebook, hi5, twitter.. probabil marea majoritate dintre noi, am auzit despre acest servicii printr-un mail, trimis in numele unui „prieten” de al nostru, acest mail fiind o invitatie pentru inregistrare.

Construirea scripturilor web, pentru exportarea adreselor din diferite servicii (gen: yahoo, gmail, hi5, etc) poate sa fie o munca enorma, mai ales ca scriptul pentru GMail nici nu va semana cu scriptul pentru Yahoo, samd.

Am gasit o varianta destul de simpla, free, si open source, cu care se poate exporta adresele de contact din  – in total – 104 de servicii web (gen: email,social network, si cms system).

Pentru informatii vizitati: openinviter.com

Aceasta metoda, functioneaza pe baza unui API, prin care (avand un username si app_id personal) ne conectam in PHP la serverul openinviter, care va realiza exportul de adrese, si trimite inapoi la serverul nostru.

Asadar nu vom afla, care este de fapt portiunea de cod, care se conecteaza de exemplu la yahoo, si exporteaza adresele, totusi este o metoda destul de rapida, si gratuita (fiind scheptic,eu zic: deocamdata).

Sfatul meu este sa va creati un cont, loghati-va, dupa care sa downloadati pachetul general. Astfel veti avea un pachet personalizat, in care vor fi facute automat toate configuratiile necesare. Stergeti fisierul: postinstall.php, si ca prim pas rulati: example.php.

Analiza directoarelor web

Ianuarie 19, 2010 Lasă un comentariu

Gasim pe internet multe liste de directoare web (romanesti sau straine), ordonate dupa PR. Problema este insa, ca in mare majoritate, aceste liste prezinta valori false la valoarea PR-ului.

Am creat un script PHP, care va analiza un fisier HTML, care contine o lista de linkuri de directoare web. Scriptul va obtine PR-ul fiecarui director (link) din aceasta lista de linkuri, si va ordona lista dupa valoare PR-ului.
Sigur ca in alegerea directoarelor nu numai PR-ul directorului are un rol deosebit. Pentru mai multe detalii, cititi acest articol.

Pentru test, am cautat o pagina de pe net, care a oferit o lista de directoare web. Am coptiat linkurile de pe pagina, intr-un fisier numit „db1.html”, si am salvat in acelasi director cu urmatoarele doua scripturi php.

SCOPUL ACESTUI TEST NU A FOST SA VA PREZINTE DIRECTOARE WEB DE CALITATE, CI SA PUTETI ANALIZA SI ORDONA IN MOD RAPID O LISTA DE DIRECTOARE.
Lista a fost luata de pe pagina http://www.heliosdesign.ro (Mi sa parut o lista de incredere.)

directory_analizer.php

<?php
set_time_limit(0);
include("pagerank.php");
?>

<?php
//list of html files
$lp = array('db1.html');

$directories = array();
$prs = array();

//scan these files
foreach ($lp as $page) {
	$content = @file_get_contents($page);
	preg_match_all ("/a[\s]+[^>]*?href[\s]?=[\s\"\']+"."(.*?)[\"\']+.*?>"."([^<]+|.*?)?<\/a>/", $content, $matches);
    $matches = $matches[1];
    foreach($matches as $var)
    {
       if (!in_array($var,$directories)) if (strlen($var) < 60) $directories[] = $var;
    }
}

foreach ($directories as $dir) {
	usleep(100);
	$pr = getPageRank($dir);
	$prs[] = $pr;
}

array_multisort($prs, SORT_DESC, SORT_NUMERIC, $directories, SORT_STRING, SORT_ASC);

echo '<html>';
echo '<table>';
for ($i = 0; $i < sizeof($prs); $i++) {
	echo '<tr><td>'.$directories[$i].'</td><td>'.$prs[$i].'</td></tr>';
}
echo '</table>';
echo '</html>';
?>

iar fisierul pagerank.php:

<?php
function StrToNum($Str, $Check, $Magic)
{
    $Int32Unit = 4294967296;
    $length = strlen($Str);
    for ($i = 0; $i < $length; $i++) {
        $Check *= $Magic;
        if ($Check >= $Int32Unit) {
            $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
            $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
        }
        $Check += ord($Str{$i});
    }
    return $Check;
}

function HashURL($String)
{
    $Check1 = StrToNum($String, 0x1505, 0x21);
    $Check2 = StrToNum($String, 0, 0x1003F);
    $Check1 >>= 2;
    $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
    $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
    $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);
    $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
    $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
    return ($T1 | $T2);
}

function CheckHash($Hashnum)
{
    $CheckByte = 0;
    $Flag = 0;
    $HashStr = sprintf('%u', $Hashnum) ;
    $length = strlen($HashStr);
    for ($i = $length - 1;  $i >= 0;  $i --) {
        $Re = $HashStr{$i};
        if (1 === ($Flag % 2)) {
            $Re += $Re;
            $Re = (int)($Re / 10) + ($Re % 10);
        }
        $CheckByte += $Re;
        $Flag ++;
    }
    $CheckByte %= 10;
    if (0 !== $CheckByte) {
        $CheckByte = 10 - $CheckByte;
        if (1 === ($Flag % 2) ) {
            if (1 === ($CheckByte % 2)) {
                $CheckByte += 9;
            }
            $CheckByte >>= 1;
        }
    }
    return '7'.$CheckByte.$HashStr;
}

function getPageRank($url) {
        $agents = array(
                    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30',
                    'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.9',
                    'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.8',
                );
    $useragent = @ini_get('user_agent');
    @ini_set('user_agent', $agents[array_rand($agents)]);
    $ch = CheckHash(HashURL($url));
    $pr_url ="http://toolbarqueries.google.com/search?client=navclient-auto&ch=$ch&features=Rank&q=info:$url";
    $data = file_get_contents($pr_url);
    @ini_set('user_agent', $useragent);
    $pos = strpos($data, "Rank_");
    if($pos !== false)
    {
        $pr = trim(substr($data, $pos + 9));
        return str_replace("\n",'',$pr);
    }
    else
        return 0;
}
?>

Iar rezultatul a fost urmatoarea:

http://www.federal.ro/ 6
http://www.firmeromania.ro/ 6
http://www.immromania.ro/ 6
http://www.kappa.ro/ 6
http://www.linkuri.ro/ 6
http://www.roportal.ro/ 6
http://www.smarty.ro/ 6
http://webdirectory.rol.ro/ 5
http://www.adresa.ro/ 5
http://www.afla.ro/ 5
http://www.apropo.ro/ 5
http://www.cere.ro/ 5
http://www.e-oferta.ro/ 5
http://www.ghidul.ro/ 5
http://www.index2000.ro/ 5
http://www.legaturi.ro/ 5
http://www.paginialbastre.ro/ 5
http://www.ponturifierbinti.com/ 5
http://www.promovare-site.ro/ 5
http://www.tre.ro/ 5
http://www.adirector.ro/ 4
http://www.bizcity.ro/ 4
http://www.director-web.santamia.ro/ 4
http://www.ghidafaceri.ro/ 4
http://www.idilis.ro/catalog/ 4
http://www.indexb.ro/ 4
http://www.info-romania.ro/ 4
http://www.infofirme.ro/ 4
http://www.prestariservicii.ro/ 4
http://www.publionline.ro/ 4
http://www.repertoar.ro/ 4
http://www.roinfo.biz/ 4
http://www.top1.ro/ 4
http://www.top300.ro/ 4
http://www.trafix.eu/ 4
http://portal.adstart.ro/ 3
http://www.24biz.ro/ 3
http://www.adauga-site.eu/ 3
http://www.adauga.com/ 3
http://www.director-web.net/ 3
http://www.dyr.ro/ 3
http://www.epagini.com/ 3
http://www.euroghid.com 3
http://www.firmeonline.ro/ 3
http://www.haabaa.ro/ 3
http://www.hotstop.ro/ 3
http://www.ldmstudio.com/ 3
http://www.links24.ro/ 3
http://www.memo.ro/ 3
http://www.prodirector.net/ 3
http://www.resurse.com/ 3
http://www.roindex.ro/ 3
http://www.seo-portal.ro/ 3
http://www.top40.ro/ 3
http://www.totaltop.ro/ 3
http://www.webe.ro/ 3
http://www.webindex.ro/ 3
http://www.westinfo.ro/ 3
http://www.wol.ro/ 3
http://www.aix.ro/ 2
http://www.amical.ro/ 2
http://www.atat.ro/ 2
http://www.butic.eu/ 2
http://www.cazare-romania.info 2
http://www.cuvinte.info/ 2
http://www.deconstructii.com/ 2
http://www.directorulweb.com/ 2
http://www.elinks.ro/ 2
http://www.euro-web-directory.com/ 2
http://www.firme-companii.ro/ 2
http://www.informatii24.ro/ 2
http://www.lynk.ro/ 2
http://www.myguide.ro/ 2
http://www.optimizare-site.com/ 2
http://www.portal.ro/ 2
http://www.topdirectorweb.ro/ 2
http://www.univers-web.ro/ 2
http://www.whr.ro/ 2
http://www.enigma.ro/ 1
http://director.domedia.ro/ 0
http://directorweb.itbox.ro/ 0
http://selectii.ro/ 0
http://www.acidlinks.com/ 0
http://www.adauga-url.com/ 0
http://www.add-url.ro/ 0
http://www.astazi.net/ 0
http://www.bumerang.ro/ 0
http://www.director-seo.org/ 0
http://www.directorfirme.ro/ 0
http://www.epweb.ro/director-web/ 0
http://www.evrika.ro/ 0
http://www.index-romania.info/ 0
http://www.murfi.com 0
http://www.rank-up.ro 0
http://www.ro-pix.com/ 0
http://www.rodirector.ro/ 0
http://www.rohit.ro/ 0
http://www.romania-worldwide.info/ 0
http://www.topdirector.net/ 0
http://www.webdb.ro/ 0
http://www.webdirinfo.ro/ 0
http://www.xchange.ro/site/ 0

PHP pagerank checker, bazat pe Google Toolbars

Ianuarie 19, 2010 Lasă un comentariu

Am sa prezint si o alta varianta pentru obtinerea pagerank-ului prin php.
Aceasta versiune „simuleaza” un utilizator, care foloseste un browser Mozilla.

<?php
function StrToNum($Str, $Check, $Magic)
{
 $Int32Unit = 4294967296;
 $length = strlen($Str);
 for ($i = 0; $i < $length; $i++) {
 $Check *= $Magic;
 if ($Check >= $Int32Unit) {
 $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit));
 $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
 }
 $Check += ord($Str{$i});
 }
 return $Check;
}

function HashURL($String)
{
 $Check1 = StrToNum($String, 0x1505, 0x21);
 $Check2 = StrToNum($String, 0, 0x1003F);
 $Check1 >>= 2;
 $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F);
 $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF);
 $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF);
 $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F );
 $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 );
 return ($T1 | $T2);
}

function CheckHash($Hashnum)
{
 $CheckByte = 0;
 $Flag = 0;
 $HashStr = sprintf('%u', $Hashnum) ;
 $length = strlen($HashStr);
 for ($i = $length - 1;  $i >= 0;  $i --) {
 $Re = $HashStr{$i};
 if (1 === ($Flag % 2)) {
 $Re += $Re;
 $Re = (int)($Re / 10) + ($Re % 10);
 }
 $CheckByte += $Re;
 $Flag ++;
 }
 $CheckByte %= 10;
 if (0 !== $CheckByte) {
 $CheckByte = 10 - $CheckByte;
 if (1 === ($Flag % 2) ) {
 if (1 === ($CheckByte % 2)) {
 $CheckByte += 9;
 }
 $CheckByte >>= 1;
 }
 }
 return '7'.$CheckByte.$HashStr;
}

function getPageRank($url) {
 $agents = array(
 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30',
 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.9',
 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.8',
 );
 $useragent = @ini_get('user_agent');
 @ini_set('user_agent', $agents[array_rand($agents)]);
 $ch = CheckHash(HashURL($url));
 $pr_url ="http://toolbarqueries.google.com/search?client=navclient-auto&ch=$ch&features=Rank&q=info:$url";
 $data = file_get_contents($pr_url);
 @ini_set('user_agent', $useragent);
 $pos = strpos($data, "Rank_");
 if($pos !== false)
 {
 $pr = trim(substr($data, $pos + 9));
 return str_replace("\n",'',$pr);
 }
 else
 return 0;
}
?>

iar testul

<?php
 include('pagerank.php');
 $pr = getPageRank('google.com');
 echo 'Google are PR  '.$pr;
?>

Submitarea sitemap-ului catre Google din PHP

Ianuarie 2, 2010 Lasă un comentariu

De multe ori, este indicat sa ajutam motorul de cautare prin folosirea unui sitemap. Daca structura site-ului nostru se schimba in timp, apar pagini noi, sau unele se schimba frecvent, este indicat folosirea si rescrierea in timp real acestui sitemap, si resubmit-area catre Google.

Tip! Puteti folosi un CronJob pentru recrearea, si resubmit-area sitemap-ului.

Urmatorul script, cere de la Google Bot reanalizarea sitemap-ului nostru.

<?php
class smsubmitter {
	function submit($sitemapurl) {
		//submit the sitemap after verification
		if (self::validate($sitemapurl)) {
			$address = 'http://www.google.com/webmasters/tools/ping?sitemap='.urlencode($sitemapurl);
			$result = @file_get_contents($address);
			if (is_numeric(stripos($result,'received'))) {
				echo 'Sitemap Notification Received.';
				return true;
			}
			else {
				echo 'Submission error.';
				return true;
			}
		}
		else {echo 'Invalid sitemap!'; }
	}

	function validate($sitemapurl) {
		//is a valid xml file or not
		$aux = @file_get_contents($sitemapurl);
		$d = new domdocument;
		if (@$d->loadXML($aux)) return true; else return false;
	}
}
?>

test:

<?php
smsubmitter::submit("http://www.domeniuldvs.ro/sitemap.xml");
?>

Dream it, code it!

PHP – calcularea densitatii a cuvintelor cheie

Decembrie 30, 2009 Lasă un comentariu

Sunt multe soft-uri, pentru calcularea densitatii cuvintelor cheie, de pe o anumita pagina. Unii iau in considerare si titlul paginii, si anumite tag-uri META, in afara de continutul propriu zis.
Am analizat rezultatele din Webmaster Tools, oferit de Google, unde apare o statistica cu cuvintele cheie gasite pe site, cu importanta fiecarui cuvant, si numarul lui de aparitie.  Se pare, ca in aceasta statistica este luat in considerare doar continutul site-ului(sau paginii anume), titlul si tag-urile META sunt ignorate aici.
Nu stim exact cum acorda Google-ul unui cuvant un anumit grad de importanta, dar stim niste factori care au un rol important in acesta:

  • unde apare acest cuvant: cel mai bine este sa  apara in HEADING-uri, intre tagurile <H1>cuvinte_cheie_aici</H1>,..,<H5>cuvinte_cheie_aici</H5>, sau in primul/ultimul paragraf din pagina.(<BODY><P>cuvinte_cheie_aici</P>)
  • formatarea cuvantului pe pagina: cuvintele cu BOLD, ITALIC, sau evidentiate prin alte metode au o importanta mai mare.
  • densitatea cuvantului pe pagina: adica numarul de aparitie a cuvantului in text, raportat de numarul tuturor cuvintelor. Nu stim exact ce valoare este indicat pentru densitatea cuvintelor cheie (ramane un secret Google), unii zic sa fie intre 2-6%, altii pana la 15%. Eu v-as zice ca acest lucru nu se poate forta. Text-ul trebuie sa fie optimizat nu numai pentru motoarele de cautare, ci trebuie sa fie si coerent, si placut pentru vizitatori. Sfatul meu este sa folositi cat de mult se poate cuvintele cheie pe pagina, dar sa nu fortati acesti lucru. Analizand statisticile din Webmaster Tools, sfatul meu este sa evidentiati aceste cuvinte cheie pe pagina prin formatarea lor, sau si mai bine puneti-le in locuri potrivite.
    Este bine sa repetati nu doar folosirea cuvintelor cheie, ci chiar intreaga fraza cheie primara.

In continuare o sa prezint scriptul meu pentru calcularea densitatii a cuvintelor pe o pagina.

<?php
class kdchecker {
	var $results;
	var $content;

	function check($url) {
		$this->results = array();
		if (!$this->content = @file_get_contents($url)) {
			$this->results = false; return false;
		}
		$this->clearit();
		$this->createlist();
		$this->createprocent();
		$this->sortit();
		return $this->results;
	}

	function clearit() {
		//filtram sursa paginii, si ne focusam numai pe text vizibil
		$this->content = eregi_replace("<head(.*)</head>","",$this->content);
		$strip_javascript_and_style = array('@<script[^>]*?>.*?</script>@si', '@<style[^>]*?>.*?</style>@siU');
		$this->content = eregi_replace($strip_javascript_and_style,"",$this->content);
		$this->content = strtolower(strip_tags(html_entity_decode(strip_tags($this->content))));
		$rlist = array(",","?","!",":","*","-","_","/","\\","|","+","\r\n","\r","\n","\"","'","`","(",")","[","]","{","}");
		$this->content = str_replace($rlist," ",$this->content);
	}

	function createlist() {
		//cream lista cu cuvinte
		//luam in considerare doar cuvintele mai lungi de 2 catactere
		//cream lista noua de cuvinte, cu numarul de aparitii
		$this->content = explode(" ",$this->content);
		for ($i=0; $i < count($this->content); $i++) {
			$this->content[$i] = trim($this->content[$i]);
			$this->content[$i] = trim($this->content[$i],".");
			$this->content[$i] = html_entity_decode($this->content[$i]);
		}

		$this->results = array();
		for ($i=0; $i < count($this->content); $i++) {
			if ((!empty($this->content[$i]))&&(strlen($this->content[$i]) >= 3)) {
				$key = $this->content[$i];
				if (isset($this->results[$key]['count'])) $this->results[$key]['count']++; else $this->results[$key]['count'] = 1;
			}
		}
	}

	function createprocent() {
		//calculam procentajul
		foreach ($this->results as $key => $value) {
			$this->results[$key]['percent'] = round(100*$value['count']/count($this->results),2);
		}
	}

	function sortit() {
		//sortare dupa count
		$aux = array();
		$c = 0;
		foreach ($this->results as $key => $value) {
			$aux[$c] = array($this->results[$key]['count'],$this->results[$key]['percent'],$key);
			$c++;
		}
		$auxx = array();
		foreach ($this->results as $v) {$auxx[] = $v['count'];}
		array_multisort($auxx,SORT_DESC,SORT_NUMERIC,$aux);
		$this->results = $aux;
	}

}
?>

test:

$kd = new kdchecker();
$kd->check("https://ptamas.wordpress.com");
echo '<html><table width="400" align="left" border="0">';
echo "<tr><td>Cuvantul</td><td>Numarul de aparitii</td><td>Densitatea</td></tr>";
foreach ($kd->results as $el) {
	echo "<tr><td>".$el[2]."</td><td>".$el[0]."</td><td>".$el[1]."</td></tr>";
}
echo '</table></html>';

Dream it, code it!