Подсчет внешних ссылок на PHP

D
На сайте с 20.12.2006
Offline
6
1849

Долго искал такой скрипт, но нашел только плагин для WordPress,

похожей направленности, но для других нужд.

Переделал под свои :)


function get_domain_name_from_uri($uri)
{
preg_match("/^(http:\/\/)?([^\/]+)/i", $uri, $matches);
$host = $matches[2];
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
return $matches[0];
}

function is_external_link($link, $HOST)
{
return (get_domain_name_from_uri($link) != get_domain_name_from_uri($HOST));
}

function get_external_links_cnt($uri)
{
$ExternalLinksCnt = 0;
$Pattern = '/<a (.*?)href="(.*?)\/\/(.*?)"(.*?)>(.*?)<\/a>/i';
$Matches = array();

if (FALSE === $Content = file_get_contents($uri))
{
return FALSE;
}

preg_match_all($Pattern, $Content, $Matches);

foreach($Matches[3] as $Link)
{
if (is_external_link($Link, $uri))
{
++$ExternalLinksCnt;
}
}

unset($Content);
unset($Matches);

return $ExternalLinksCnt;
}

$url = 'http://history.ru/';
echo get_external_links_cnt($url);
Новая игра - РПГ! (http://www.igra3k.ru/vip/?posol=24431)
dema501
На сайте с 03.03.2003
Offline
64
#1

а если будет написано <a href='http://site.com'> - то твой скрипт ее за внешнюю не засчитает

или <a href="ftp://site.com"> - тоже внешняя

dzutaro:
Долго искал такой скрипт, но нашел только плагин для WordPress,
похожей направленности, но для других нужд.

Переделал под свои :)


function get_domain_name_from_uri($uri)
{
preg_match("/^(http:\/\/)?([^\/]+)/i", $uri, $matches);
$host = $matches[2];
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
return $matches[0];
}

function is_external_link($link, $HOST)
{
return (get_domain_name_from_uri($link) != get_domain_name_from_uri($HOST));
}

function get_external_links_cnt($uri)
{
$ExternalLinksCnt = 0;
$Pattern = '/<a (.*?)href="(.*?)\/\/(.*?)"(.*?)>(.*?)<\/a>/i';
$Matches = array();

if (FALSE === $Content = file_get_contents($uri))
{
return FALSE;
}

preg_match_all($Pattern, $Content, $Matches);

foreach($Matches[3] as $Link)
{
if (is_external_link($Link, $uri))
{
++$ExternalLinksCnt;
}
}

unset($Content);
unset($Matches);

return $ExternalLinksCnt;
}

$url = 'http://history.ru/';
echo get_external_links_cnt($url);
M
На сайте с 23.08.2001
Offline
74
#2

Может это подойдет? Как работает не помню, давно было:


<?php

$url=$_GET["url"];
if (!isset($url)) exit;

$html=implode("",file($url));

$types = array("href", "src", "url");
while (list(,$type) = each($types)) {
$innerT = $strict?'[a-z0-9:?=&@/._-]+?':'.+?';
preg_match_all ("|$type\=([\"'`])(".$innerT.")\\1|i", $html, &$matches);
$ret[$type] = $matches[2];
}

$hosts=Array();
$elinks=Array();
$ilinks=Array();
foreach ($ret["href"] as $k=>$v) {
$p=strpos($v,"#");
if ($p!==false) {
$v=substr($v,0,$p);
}
if ($v=="") continue;

if (substr($v,0,7)!="http://") {
$ilinks[]=$v;
}
else {
if (substr($v,0,strlen($url))==$url) $ilinks[]=$v;
else {
$elinks[]=$v;
$z=parse_url($v);
if (!isset($hosts[$z["host"]])) $hosts[$z["host"]]=1; else $hosts[$z["host"]]++;
}
}
}

print "<H1>Уникальных внешних ссылок: ".count($hosts)."</H1>\n";
print "<UL>\n";
foreach ($hosts as $k=>$v) {
print "<LI>".$k." - ".$v;
}
print "</UL>";

print "<H1>Неуникальных внешних ссылок: ".count($elinks)."</H1>\n";
print "<UL>\n";
foreach ($elinks as $k=>$v) {
print "<LI>".$v;
}
print "</UL>";

print "<H1>Неуникальных внутренних ссылок: ".count($ilinks)."</H1>\n";
print "<UL>\n";
foreach ($ilinks as $k=>$v) {
print "<LI>".$v;
}
print "</UL>";

?>
C уважением, Михаил. http://mike.nov.ru/ (http://mike.nov.ru/)
dema501
На сайте с 03.03.2003
Offline
64
#3

У вас в скрипте ссылки считаются внешними если они начинаются с http, но нет проверки домена.

Возможно он тотже самый, те ссылки стоят полные, а не относительные.

M
На сайте с 23.08.2001
Offline
74
#4
dema501:
У вас в скрипте ссылки считаются внешними если они начинаются с http, но нет проверки домена.
Возможно он тотже самый, те ссылки стоят полные, а не относительные.

Извиняюсь что не подписал, решение не претендует на законченность, но в свое время мне помогало.

hypno
На сайте с 17.07.2006
Offline
110
#5

тоже ищу такой скрипт , пока что корректно работающих скриптов не нашел , все ошибаются ..

Y
На сайте с 05.04.2007
Offline
0
#6

А не судьба сначала выбрать регэкспом все location'ы ссылок, потом канонизировать их какой нибудь стандартной функцией, коих полно в нете, а уж потом смотреть на домен? По-моему логичнее.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий