2014年11月28日


WEB アーカイブと Google ウェブマスターツール / ペンギンアップデート以来不明なリンク切れエントリが急増


(Panguin Tool ( ペンギン・パンダアップデート影響確認ツール ) | Technology by Barracuda Digital)

気のせいか、この間のペンギンアップデート以来、よく解らないリンク切れのエラーが Google ウェブマスターツールで積み重なって行くのですが、どれも全く意味の無いエントリで、かなり前に公開をやめたブログの記事ばかりです。



しかも、リンク元にはそのリンクは無く、そもそも、リンク元がリンク切れしているものもあります。どうも、Google の解析が失敗しているらしいと思われる現象が他にもあって、JavaScript 内の処理結果を間違って判断しているような形跡もあります。

とは言え、Google に何か言うのはお角違いなので、こちらは対症療法を頑張るしかありません。( 該当する JavaScript は消しました )なので、リンク切れの記事をリニューアルして公開する方向で作業していますが・・・・・

ここで一つ問題が。

Google ウェブマスターツールでは、URL は解るのですがタイトルが解らないのでどの非公開記事なのかわかりません。リンク元にはもう既に無いのですから( 普通はこれで確認しますけれど )

そこで。

WEB アーカイブの出番です。一般のブログであれなんであれ、WEB アーカイブには見事に保存されていました。ほとんど当時のまま表示可能で、タイトルを取得する事は簡単で、そこからブログシステム内の検索で取り出す事ができます。

Wayback Machine - Internet Archive


WEB アーカイブは他にもいろいろ助かっています。

■ 対象サーバーがダウンしていてもダウンロード可能で記事も読める。
■ サイトが閉鎖していても、当時のままのソフトウェアがダウンロードできる。

特に、最近良くフリーフォントの配布先がなくなったりしていた事が多かったので、助かっています。

これは自分のサイトでも言える事で、URL さえどこかに保存できていたら、当時の文章やファイルを手に入れる事ができます。

関連する情報

サイトが閉鎖された Gray Graphics さんのフリーフォント



タグ:google
posted by at 2014-11-28 21:20 | テクニック | このブログの読者になる | 更新情報をチェックする

2014年11月27日


Seesaa が『この広告は1年以上更新がないブログに表示されております。』という広告を表示しています。

新規投稿でないと対象にならないようです。info.seesaa.net をドメイン内検索をしても、該当するものは無いので突然の仕様変更かもしれません。

ブックマークレット : Googleのドメイン内検索を任意のページで実行




ソースを表示して、一番下までスクロールすると、以下のような記述があります。
<p style="margin:0;padding:0;font-size:10px;color:#DDD;">この広告は1年以上更新がないブログに表示されております。</p>
</div>
<script type="text/javascript">
//<![CDATA[
document.getElementById('seesaa-bnr-close').addEventListener('click', function(){ document.getElementById('seesaa-bnr').style.display = 'none'; });
//]]>
</script>
<script type="text/javascript">
var url = document.URL;
document.write("<img src='http://d3mgo879eugsjh.cloudfront.net/t.gif?url=" + encodeURIComponent(url) + "' />");
</script>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<script type="text/javascript">
var nend_params = {"media":3,"site":3,"spot":57750,"type":2,"oriented":1,"sp":0};
</script>
<script type="text/javascript" src="http://js1.nend.net/js/nendAdLoader.js"></script>
<script type="text/javascript" src="http://t.seesaa.net/analytics-seesaa-net.js?v=20141014&tid=UA-53911882-1"></script>



posted by at 2014-11-27 23:16 | クライアント/サーバー | このブログの読者になる | 更新情報をチェックする

Cron の代替え : VBScript でタイマー処理

同一スクリプトで、別々の処理は一応可能のようですが、厳密には非同期では無く一つの処理を実行中は他の処理は待たされるようなので、本来の非同期処理が必要な場合は、外部アプリケーション(スクリプト)を呼び出す形にして下さい。

Windows には、昔から「スケジューラ」というサービスがあり、Cron と同じ事が可能です。しかし、Windows 純正で、URL を呼び出すとなると、それなりに知識も必要ですし、そもそもWindows のスケジューラは、非常に解りにくい不便なしろもので、できればあまり使用したく無いです。

そこで、VBScript のみを使って簡単なスケジューラを作り、そこからさらに VBScript で任意の URL を呼び出します。

10秒毎の非同期別スレッド処理のサンプル
' このセクションは、cscript.exe で処理を強制させるものです
str = WScript.FullName
str = Right( str, 11 )
str = Ucase( str )
if str <> "CSCRIPT.EXE" then
	str = WScript.ScriptFullName
	Set WshShell = CreateObject( "WScript.Shell" )
	Call WshShell.Run( "cmd.exe /c cscript.exe """ & str & """ & pause", 3 )
	WScript.Quit
end if

Dim Disp : Disp = True	' False にすると、秒単位の表示はしなくなります
Set WshShell = WScript.CreateObject("WScript.Shell")

Set SINK = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
objWMIService.ExecNotificationQueryAsync _
 SINK, _
 "SELECT * FROM  __InstanceModificationEvent " & _
 "WHERE TargetInstance ISA 'Win32_LocalTime'"

Wscript.Echo "非同期別スレッドタイマー処理を開始します"
str = WScript.FullName
str = Right( str, 11 )
str = Ucase( str )
if str = "CSCRIPT.EXE" then
	' Cscript.exe で、CTRL+C で終わらせる
	Do
		WScript.Sleep 10000
	Loop
end if

' この処理は、毎秒非同期のスレッドから呼び出されます
Sub SINK_OnObjectReady(objLatestEvent, objAsyncContext)

	' 10秒毎の非同期別スレッド処理
	if objLatestEvent.TargetInstance.Second MOD 10 = 0 then
		' ここが 10秒毎に呼び出されます
		WshShell.Run( "wscript httpget.vbs http://xxxxx.jp/xxxxx.php" )
	end if

	if Disp then
		' 秒単位に呼び出されるこのルーチンで毎回表示
		Wscript.Echo "Time: " & _
			objLatestEvent.TargetInstance.Hour & ":" & _
			objLatestEvent.TargetInstance.Minute & ":" & _
			objLatestEvent.TargetInstance.Second
	end if
End Sub



httpget.vbs
if Wscript.Arguments.Count = 0 then
	Wscript.Echo "httpget url [savepath]"
	Wscript.Quit
end if

' ダウンロード用のオブジェクト
Set objSrvHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")

' 第1引数は URL
strUrl = Wscript.Arguments(0)
if Wscript.Arguments.Count = 1 then
	' 第2引数が無い場合は、URL の最後の部分
	' ( カレントにダウンロード )
	aData = Split(strUrl,"/")
	strFile = aData(Ubound(aData))
else
	' 第2引数がある場合はそれをローカルファイルとする
	strFile = Wscript.Arguments(1)
end if

' ダウンロード要求
on error resume next
Call objSrvHTTP.Open("GET", strUrl, False )
if Err.Number <> 0 then
'	Wscript.Echo Err.Description
	Wscript.Quit
end if
objSrvHTTP.Send
if Err.Number <> 0 then
	' おそらくサーバーの指定が間違っている
'	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

if objSrvHTTP.status = 404 then
'	Wscript.Echo "URL が正しくありません(404)"
	Wscript.Quit
end if

' バイナリデータ保存用オブジェクト
Set Stream = Wscript.CreateObject("ADODB.Stream")
Stream.Open
Stream.Type = 1	' バイナリ
' 戻されたバイナリをファイルとしてストリームに書き込み
Stream.Write objSrvHTTP.responseBody
' ファイルとして保存
Stream.SaveToFile strFile, 2
Stream.Close



関連する記事

VBScript : 30秒後のイベント処理
VBScript : 10秒毎に処理を実行する( 時刻指定も可能 )
VBScript : スクリプトを終了しないようにする



posted by at 2014-11-27 23:09 | VBScript | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します