ともさんのHP >プロブラミング >自作JavaLibrary >sitemap.xml 自動作成プログラム
sitemap.xml 自動作成プログラム
GoogleAdSenseに入れてもらったので、sitemapも作ることにしました。手動で作るのは大変なので JAVAを使って自動生成できるようにしました。ダウンロード出来ます。欲しい方は使ってみてください。
sitemap.xmlとは...
このHPにはこんなファイルがありますという文書ファイルです。Googleに送るとファイルが登録され、誰かが検索したときに自分のHPがピックアップされるようになります。もちろん、HPがどこかとリンクされていれば自動的にGoogleに登録されるはずなので、sitemapを報告しなくても変わらないはずなのですが。私の実感では検索時の ランクがsitemap作成後に上がったような気がします。(Googleはそんなことはないと書いていますが) sitemap.xmlの書式は下記のとおり。
<?xml version="1.0" encoding="UTF-8" ?> <urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<url> <loc>//totomo.ddo.jp/index.htm</loc> <priority>1</priority> <changefreq>daily</changefreq> <lastmod>2007-05-21T20:46:44+09:00</lastmod> </url>
<url> <loc>//totomo.ddo.jp/a/abc.htm</loc> <priority>1</priority> <changefreq>daily</changefreq> <lastmod>2007-05-21T20:46:44+09:00</lastmod> </url>
</urlset> |
<url></url>の中に1つのファイルの情報を書きます。
<loc></loc>はファイルのURL
<priority><priority>はファイルの相対的な重要度で、1.0~0.0の値を入れます。
<changefreq>daily</changefreq>は更新頻度で、
always(常時)、hourly(毎時)、daily(毎日)、weekly(毎週)、monthly(毎月)、yearly(毎年) 、never(不変)
のいずれかを入れます。
<lastmod>2007-05-21T20:46:44+09:00</lastmod>は最後に更新した日付で、指定の書式で書きます。
Sitemap.jar
私の作ったプログラムはこれ(11kb)。もちろんフリーですが、使用によりどんな障害がおきても 感知しませんのでそのつもりでお使いください。
指定したフォルダ以下のhtmファイルとそのファイル日時を調べてsitemap.xmlファイルを作ります。
前提条件
Windowsのみで動きます。 JAVA 楽天 をインストールして動いていればOK(多分) ソースファイルを読むとLinuxでも動くように見えますが、呼び出すClassが対応していないのでエラーが出ます。残念です。
フォルダ、ファイル構成が下記のようにURLを一致している必要があります。「Windowsパソコンを自宅でWebサーバーに使ってます」という方はそのまま使えるでしょう。
パソコン内のファイル構成が上のように//totomo.ddo.jpとc:\htdocsを入れ替え、¥と/を読み換えればURLを同一になる状態であればOKです。
注意点
現状、//totomo.ddo.jp/a/b.htmというファイルがURL上にあるけど、公開したくないので他とリンク張っていない、というファイルがある場合は取り除いておきます。sitemap.xmlに登録されてしまい、検索に引っかかるようになってしまうので注意が必要です。
「z_」で始まるフォルダ以下のファイルは検索されないようにしてあります。
上の例ですと、//totomo.ddo.jp/z_bcd/index.htmというファイルはsitemap.xmlに登録されません。
使い方
適当なフォルダを作り、ダウンロードしたsitemap.jar置き、sitemap.csvというファイルを作ります。
sitemap.csvは自分で作ります。テキストファイルですが、エクセルで編集できます。
ファイルの1行目は、URLとフォルダ名の入れ替えを書きます。
下の場合、URLが//totomo.ddo.jp 自分のパソコンに保存してある場所がd:\htdocsである場合です。
2行目以降はファイル名の相対的な重要度を記入します。指定がなければ標準の0.5が記入されます。 特に重要度を上げたいファイルを記入してあげれば良いです。
編集が終わったら保存します。保存後、もう一度ノートパッドなどで開いてみて確認すると良いでしょう。
重要度の数値はは1や0でなく1.0、0.0とある必要があります。
sitemap.csvが出来たら実行します。sitemap.jarをダブルクリックします。(ファイルが解凍されてしまう場合は「アプリケーションから開く→Javaw」で実行できます)。もちろん、JAVAが入っていないと実行できません。
実行してもウインドウは開きません。しばらく待っているとsitemap.xmlというファイルが出来ます。これで実行完了。
一応sitemap.xmlを空けてみて、正常に出来ているか確認してみてください。
sitemap.xmlの報告は、ここからします。予めIDを取得しておく必要があります。
以下はソースファイルです。JAVAを使われる方は参考にされてください。classが足りないのでそのままコンパイルしても実行できません。あしからず。
package tomolib.sitemap; import tomolib.util.*; import java.util.*; import java.io.*;
/** * サイトマップを作成するclass * 2007/5/23作成 * Tomoyuki Ito */ public class SiteMap {
/** * サイトマップを作成する */ public static void main(String[] args) { ReadDir rd = new ReadDir(); //ルートディレクトリの設定 String dir = "."; //urlの設定 String url = "//totomo.ddo.jp"; //dataにdir以下のディレクトリが全て入る String data[] = null; Vector vtmp = new Vector(); //Vector vttmp = new Vector(); String thmfile[] = null; //設定Dataの数 int row, col; //設定Dataの入れ物 String sdata[][];
//OSの判別 String osname = System.getProperty( "os.name" ); // System.out.print( osname ); if(osname.indexOf( "Windows" )>=0){ osname = "Windows" ; } else if(osname.indexOf( "Linux" )>=0){ osname = "Linux" ; } else if(osname.indexOf( "Mac" )>=0){ osname = "Mac" ; } else { // その他の環境だったときの処理 }
//設定DATAの取り込み col = 2; readKanmaFile rkf = new readKanmaFile(); rkf.read(col, "sitemap.csv" ) ; sdata = rkf.data ; row = rkf.row; dir = sdata[0][1]; url = sdata[0][0]; System.out.println( sdata[0][0] + " " + sdata[0][1] );
//dataにdir以下のディレクトリが全て入る data = rd.readAllDir( dir );
//dir 以下にある.htmファイルを全てリストアップ String ls[]=null; for(int i=0 ; i < data.length ; i++ ) { if(data[i].indexOf("z_")==-1){ System.out.println( data[i]); ls = null; //ファイルリストの作成 try { File fdir = new File( data[i] ); ls = fdir.list(); } catch( Exception e ) { // 入出力以外のエラーが発生 System.err.println("Error...."); System.exit(-1); } for( int ii=0; ii<ls.length; ii++ ) { //htmファイル検索 String tmps = ls[ii].toUpperCase(); if( tmps.indexOf( ".HTM", 0 ) > 0 ){ if(osname.equals("Windows")){ vtmp.addElement( data[i] + "\\" + ls[ii] );} if(osname.equals("Linux")){ vtmp.addElement( data[i] + "\\" + ls[ii] );} }} }}
thmfile = new String[ vtmp.size() ]; for(int ii=0 ; ii < vtmp.size() ; ii++ ) { thmfile[ii] = (String)vtmp.get(ii); //System.out.println( thmfile[ii]); }
//ファイルの生成日調査 String stime[] = new String[ thmfile.length ]; for(int i=0 ; i < thmfile.length ; i++ ) { File tmpfile = new File( thmfile[i] ); Calendar c = Calendar.getInstance();//一時使用カレンダの作成 Date d = new Date( tmpfile.lastModified() ); c.setTime( d ); tomolib.util.Util u = new tomolib.util.Util(); stime[i]= u.CalendarToString4( c ); thmfile[i] = url + thmfile[i].substring( dir.length() ); thmfile[i] = thmfile[i].replace( '\\','/'); // thmfile[i]= url + thmfile[i]; System.out.println( thmfile[i] + " " + stime[i] ); }
//サイトマップ作成 TextFile to = new TextFile(); to.OutOpen("sitemap.xml"); to.Write( "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" ); to.Write( "<urlset xmlns=\"http://www.google.com/schemas/sitemap/0.84\">" ); String pri; for(int i=0 ; i < thmfile.length ; i++ ) { pri="0.5"; for(int ii=1;ii<row;ii++) {if(sdata[ii][0].equals(thmfile[i])){pri=sdata[ii][1];};} to.Write( "" ); to.Write( "<url>" ); to.Write( "<loc>" + thmfile[i] + "</loc>" ); to.Write( "<priority>" + pri + "</priority>" ); to.Write( "<changefreq>daily</changefreq>" ); to.Write( "<lastmod>" + stime[i] + "</lastmod>" ); to.Write( "</url>" ); }
to.Write( "</urlset>" ); to.OutClose();
}//end main
} |
任意のディレクトリ以下の全てのディレクトリをリストアップするClassは下記です。
package tomolib.util;
import java.io.*; import java.util.*;
/** * 指定のディレクトリ内のサブディレクトリを全て探して返す * 2007/5/23 * Tomoyuki Ito */ public class ReadDir { public static void main(String[] args) { String data[] = null; ReadDir t = new ReadDir(); data = t.readAllDir( "c:\\work\\tomolib" );
for(int i=0 ; i < data.length ; i++ ) { System.out.println( data[i]); }
}//end main
public String[] readAllDir(String dirs) { String dr = null ; //OSの判別 String osname; osname = System.getProperty( "os.name" ); // System.out.print( osname ); if(osname.indexOf( "Windows" )>=0){ osname = "Windows" ; } else if(osname.indexOf( "Linux" )>=0){ osname = "Linux" ; } else if(osname.indexOf( "Mac" )>=0){ osname = "Mac" ; } else { // その他の環境だったときの処理 } if(osname.equals("Windows")){dr="\\" ;} if(osname.equals("Linux")){dr="/" ;}
String stmp1[] = null; String stmp; Vector vtmp = new Vector(); int i=0; String data[] = null; vtmp.addElement( dirs ); while(true){ if(i==vtmp.size()){break;} stmp1=null; stmp1 = readDirs( (String)vtmp.get(i) ); stmp = (String)vtmp.get(i); if( stmp1 != null ) { for( int ii=0; ii<stmp1.length; ii++ ) { // System.out.println( stmp +"\\"+ stmp1[ii]); vtmp.addElement( stmp + dr + stmp1[ii] ); } } i++; } data = new String[ vtmp.size() ]; for(int ii=0 ; ii < vtmp.size() ; ii++ ) { data[ii] = (String)vtmp.get(ii); // System.out.println( data[ii] +ii +" "+vtmp.size()); } return data;
}
public String[] readDirs( String dirs) { String ls[] = null; //この中にファイルリストが格納される Vector vtmp = new Vector(); String dr = null ; //OSの判別 String osname; osname = System.getProperty( "os.name" ); // System.out.print( osname ); if(osname.indexOf( "Windows" )>=0){ osname = "Windows" ; } else if(osname.indexOf( "Linux" )>=0){ osname = "Linux" ; } else if(osname.indexOf( "Mac" )>=0){ osname = "Mac" ; } else { // その他の環境だったときの処理 } if(osname.equals("Windows")){dr="\\" ;} if(osname.equals("Linux")){dr="/" ;}
//フォルダリストの作成 try { // File dirtmp = new File( "." ); File dirtmp = new File( dirs ); ls = dirtmp.list(); } catch( Exception e ) { // 入出力以外のエラーが発生 System.err.println("Error...."); return null; }
for( int i=0; i<ls.length; i++ ) { try { File dirtmp = new File( dirs+dr+ls[i] ); if( dirtmp.isDirectory()){ vtmp.addElement( ls[i] ); } } catch( Exception e ) {System.err.println("Error....");return null ;} } String data[] = new String[ vtmp.size() ]; for(int i=0 ; i < vtmp.size() ; i++ ) { data[i] = (String)vtmp.get(i); } return data; }
} |
最終更新日: 2007-05-26 00:00:00
ともさんのHP >プロブラミング >自作JavaLibrary >sitemap.xml 自動作成プログラム
ツイート