Neo Inspiration

Avatar

中の人:jakkrokk (HN統一しました) がphp,javascript,air,flex などなど好き勝手書いてます。仕事は主にWEBシステムの設計と開発、SEO全般など。

Air-Seo Scouter をバージョンアップしました


http://neoinspire.net/air-seo-download ←こちらに移動しました

リリースしてたいしてたってないのに、
反響大きくてびっくりです。
使ってくれてる皆様に感謝です。

で まあ早速いくつかコメントとかもらったものに関して
追加してみたりしたので、
Ver1.1としてアップしてあります。

追加機能

・ドメインエイジの取得
・ヤフカテ登録のチェック

の2点

ドメインエイジに関しては
すげー綿密に作ることも可能だったんですが、
一般的に出回ってるほぼ全てと同じように
web archive を元に抽出しているので、
実際に取得した日付よりも若干後(ようはweb archiveが初めてキャッシュした日付)
から起算する形になっています。

あとドメインエイジに関しては結構重たいので、
ロードしっぱなしにしておいて
どんどんURL突っ込んでもらって大丈夫です。
(Ajaxで処理ってるんで、時間がたてば全部ちゃんとロードします)

バグフィックス

・直接フォームに書き込めなかった(致命的すぐるww)

の1点です。
なぜか return false してたので
クリックしても書き込めないという。

ということで

ということでこちらからダウンロードどうぞ

http://neoinspire.net/air-seo/air_seo_ver1.1.air

以下初めての方の為に

インストール方法

Adobe Airがインストールされていないと動きませんので、
まずはここからAdobe Airをインストールしてください。
(Flashプレイヤーみたいなもんです)
 ⇒デスクトップガジェットとか入れてる方は既に入ってる可能性もあります。

http://get.adobe.com/jp/air/

1,2分で終わりますので、
インストールが終わったら、これをダウンロード
http://neoinspire.net/air-seo/air_seo_ver1.1.air

で、ダウンロードしたものをダブルクリックでオワリ。

Ngramを利用したページ類似度チェッカー+Ngram計算のphpクラス

Ngramを利用したページ類似度チェッカー+Ngram計算のphpクラス

Ngram

まあ何がやりたかったって
スパムチェック的な類似度チェッカーです。

こんなかんじ。
類似度チェッカー

全く違うURLだと5~10%くらいになって
ちょっと関係がある(リンク紹介してたり)すると20%くらいかな
同じブログの違う記事とかだと40%くらいになって
60%超えたらかなり似てるページってかんじのラインです。

例えば wikiの アイスランドのページとアイルランドのページとかでやると
重複度77%とかになります。

Googleは言語にとらわれない解析方法を使っているとのことなので、
高確率で、どっかにNgramは使ってると思うので、
デュプリケイトコンテンツとかの参考に使えるかなーと。

一応ソース公開

たいしたものじゃないんですが、たいしたものじゃないだけに
ソースくらい出しとけというお話です。

アルゴリズム的には単純に
・URLからタグを引っぺがす
・出てきたテキストのNgram(3)を抽出
・2個URLの共通項を出す(php の array_instersect 使っただけ)
・(共通項の数 / Ngram(3)の個数) %

まあなんか array_intersect とarray_diff がま逆の動きをしないので
あやしいんですが。。
ソースを追うのもめんどいので後で検証。

使い方

Newして(引数でNgram2,3とかコントロール)
RunメソッドにURL突っ込むだけです。

こんなかんじです。
(以下見やすくする為にインデントを全角スペースに変換してあります。)

$Ngram = new CreateNgram();
if($Ngram->run(”http://neoinspire.net/archives/92″,”http://neoinspire.net/archives/90″)){
  print($Ngram->result);
  echo”<pre>”;
  print_r($Ngram->mainNgram);
  print_r($Ngram->checkNgram);
  echo”</pre>”;
}else{
  echo “対象のURLを解析できませんでした。”;
}

以下ソースです。コピペしてUTF8で保存してください。

<?php
/*
*2つのURLのNgramを比較して類似度を出すクラス
*引数を一つで出した場合単純に対象URLのNgramを抽出する
*/
Class CreateNgram{

  var $mainNgram; //第一引数URLのNgram
  var $checkNgram; //第二引数URLのNgram

  var $ngram; //Ngramをいくつでやるか
  var $result; //類似度

  function CreateNgram($ngram=3){
    $this->ngram = $ngram;
  }

  function run($mainUrl=null,$checkUrl=null){
    if(!empty($mainUrl) && !empty($checkUrl)){
      if($mainHtml = mb_convert_encoding(@file_get_contents($mainUrl), ‘UTF-8′, ‘auto’))
        $this->mainNgram = $this->_ngram($this->_solid($mainHtml));

      if($checkHtml = mb_convert_encoding(@file_get_contents($checkUrl), ‘UTF-8′, ‘auto’))
        $this->checkNgram = $this->_ngram($this->_solid($checkHtml));

      if(!empty($this->mainNgram) && !empty($this->checkNgram)){
        $mainResult = @array_intersect($this->mainNgram,$this->checkNgram);
        $checkResult = @array_intersect($this->checkNgram,$this->mainNgram);
        $result1 = count($mainResult);
        $result2 = count($checkResult);
        $cnt1 = count($this->mainNgram);
        $cnt2 = count($this->checkNgram);
        $this->result = @round((($result1 + $result2) / ($cnt1 + $cnt2)),3);
        return true;
      }else{
        return false;
      }
    }else{
      return false;
    }
  }

  function _ngram($query=null){
    $query = trim($query);
    if(!empty($query)){
      $len = mb_strlen($query,’UTF-8′);
      for($i=0; $i< $len; $i++){
        $buf = trim(mb_substr($query, $i, $this->ngram,’UTF-8′));
        if(isset($buf))$ngrams[] = $buf;
      }
    }else{
      $ngrams = “”;
    }
    return $ngrams;
  }

  function _solid($html=null){
    if($html){
      $pat[]=”/<script.+?\/script>/is”;
      $pat[]=”/<style.+?\/style>/is”;
      $pat[]=”/<\!\-\-.+?\-\->/is”;
      $pat[]=”/<.*?>/is”;
      $pat[]=”/\r|\n|\s/is”;
      $rep=”";
      return preg_replace($pat,$rep,$html);
    }else{
      return “”;
    }
  }
}
?>

GoogleSitemapを作成するPHP Cakephpでも~

自動で全部だしたかったんですが、できなそうだったので
せめてってことで、 URLリストを渡したらそれをsitemapにするものをつくっていました。
まあ必要があって作成していたので、一応公開しておきます。
たいしたものじゃないですが。
Class.Sitemap.zip

一応googleのSitemapの説明のとか書いた前の記事
http://neoinspire.net/archives/category/seo/page/4

使い方

・前準備

.htaccessで

RewriteRule sitemap.xml$ sitemap.php

として
/sitemap.xml
でsitemap.phpが呼ばれるようにする。

・PHP作成

sitemap.phpを作って

require(Class.Sitemap.php);

//URLデータ作成
$array[0]['url'] = “http://www.a.com”; //url
$array[0]['lastmod'] = “2008-01-01″; //LastModified Date
$array[0]['changefreq'] = “daily”; //Change Frequency
$array[0]['priority'] = “0.5″; //Priority

//以下必要なだけArrayに突っ込む
$array[1]['url'] = “http://www.a.com”;
$array[1]['lastmod'] = “2008-01-02″;
$array[1]['changefreq'] = “monthly”;
$array[1]['priority'] = “0.5″;

//クラスを呼び出してGO
$Sitemap = new Sitemap();
$Sitemap->create($array);
$Sitemap->output();

こんな感じの中身を書く。
これで Arrayをバラしてsitemapっぽいxmlを吐き出します。

ちなみに中では headerコマンド使ってますので、一切のprintとかができません。

CakePHPで使うには

1:
/app/webroot/files/
にClass.Sitemap.phpをおく

2:
/app/webroot/.htaccessに

RewriteRule sitemap.xml$ sitemap.php

を追加する。

3:
/app/webroot/sitemap.phpを作る

sietmap.phpは

require(/files/Class.Sitemap.php);

$array[0]['url'] = “http://www.a.com”; //url
$array[0]['lastmod'] = “2008-01-01″; //LastModified Date
$array[0]['changefreq'] = “daily”; //Change Frequency
$array[0]['priority'] = “0.5″; //Priority

//以下必要なだけArrayに突っ込む
$array[1]['url'] = “http://www.a.com”;
$array[1]['lastmod'] = “2008-01-02″;
$array[1]['changefreq'] = “monthly”;
$array[1]['priority'] = “0.5″;

$Sitemap = new Sitemap();
$Sitemap->create($array);
$Sitemap->output();

こんなかんじ!

これで http://www.a.com/sitemap.xml
でsitemapがみれるはずです。

Class.Sitemap.zip

Continue Next page

Twitter