モバイル機器(PSP)でお手軽オフラインブラウズ

どうも。お久しぶりです。

最近、ひょんな事からいい物を頂いてしまい、活用法を色々と考えておりました。

これでライフハッカーの仲間入りかもしれません。

PSPとやらはどうやら、ローカルに保存したHTMLを読むことが出来るらしいです。
ただ、アクセスが面倒だったり、いちいちMHTに変換したりとか、色々と面倒な感じ。

と、言うことで。
普段僕が使っているScrapBookというFireFoxアドオンと適当にでっち上げたスクリプトで、スクラップしてあるローカルサイトをメモリースティックに転送してインデックスを張るまでのことをしてみようというそんな計画。

ソースはこんなのです。
最近の人はexeはおk、スクリプトは危ないみたいな風潮があるんで、あえて時代に逆らってスクリプトです。
中身が見えるので安心。

もしperl版やらRuby版が要るのでしたらコメントを下さい。
※新しいバージョンがあります!→PSPでお手軽オフラインブラウズ 解説!

'オブジェクトの作成
Set objShell = WScript.CreateObject("WScript.Shell")
Set colEnv = objShell.Environment("Process")

'コピー元のディレクトリを選ぶ
rootpath = colEnv("HOMEDRIVE")&colEnv("HOMEPATH")&"\Application Data\Mozilla\Firefox\Profiles"

'プロファイルの一番上のディレクトリ使用
'※自分で修正できる方は適当に直して下さい。
dataSourceDir= GetProfilefolder(rootpath)
dataSourceDir=dataSourceDir&"\ScrapBook\data"

'拾って歩く作業の開始

Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(dataSourceDir)


dim out
out = ""
For Each subf in f.subfolders
  'ファイル名を決める。
  fn = subf&"\index.dat"
  id=""
  title=""
  icon=""
  buf=""
  'データはUTF-8なのでとりあえずShiftJISに変換。
  Set fso = CreateObject("Scripting.FileSystemObject")
  set str = WScript.CreateObject("adodb.stream")
  str.type = 2
  str.charset = "utf-8"
  str.open
  str.loadFromFile(fn)
  txt = str.readText()
  str.close
  str.open
  str.position = 0
  str.charset = "Shift-Jis"
  str.writeText(txt)
  str.position = 0
  '改行でぶった切って一行ずつ処理。
  lines=Split(txt,Chr(10))
  for i=0 to ubound(lines)-1
    buf=lines(i)
    if buf<>"" then
      'key[tab]valueなので、分割
      pos = instrB(buf,chr(9))
      key=leftB(buf,pos-1)
      val=midB(buf,pos+2)
      if key="title" then title=val
      if key="id" then id=val
      if key="icon" then icon=val
    end if
    
  next

  '出力データを作成。
  '※レイアウトとか変えたい人はここで変えてください。
  out=out&"<a href='data/"&id&"/index.html'>"
  out=out&"<img src='data/"&id&"/"&icon&"' border=0>"&title&"</a><br>"

next 

with nothing 
  Set objShell = CreateObject("Shell.Application")
  Set objFolder = objShell.BrowseForFolder( _
    0, "保存先フォルダを選択:", 0, "ssfDeskTop")

  If objFolder Is nothing Then

    MsgBox("インデックスを保存するフォルダを選択して下さい")

  Else
    pathFolder = objFolder.Items().Item().Path
    if right(pathFolder,1)="\" then pathFolder=Left(pathFolder,len(pathfolder)-1)
    Set objFolder = nothing
  End If

  if pathFolder<>"" then
    out = "<html><head><title>PSPSCRAPBOOKS</title></head><body>" & out & "</body></html>"
    set fs = WScript.CreateObject("Scripting.FileSystemObject")
    set stream = fs.CreateTextFile(pathFolder&"\i.html")
 
    stream.Write(out)
    stream.Close()
    if( fs.FolderExists(pathFolder&"\data")) then fs.DeleteFolder pathFolder&"\data",true
    fs.CreateFolder(pathFolder&"\data")
    Set objShell = CreateObject("Shell.Application") 
    set dest = objShell.NameSpace(pathFolder)
    set from = fs.GetFolder(dataSourceDir)
    dest.CopyHere dataSourceDir, &H10 

    msgbox "完了"
  end if 
end with

function GetProfilefolder(path)

Dim objFS, objFolder

Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(path)

'すべてのサブフォルダを回る
For Each subf In f.SubFolders
    if instr(subf,".default")>=1 then GetProfilefolder=subf
Next

end function

メモ帳で書いたので文字の大文字小文字がバラバラとかそういうのは無しで。
コピペしてPSPScrap.vbsとでも保存してください。

※使い方
1.まずScrapBookで好きなサイトを収集します。
2.先ほどのPSPScrap.vbsを実行します。ダブルクリックで概ねいけます。
3.ほどなく保存先ディレクトリを選ぶ画面が出るので、PSPをつないでPSPメモステの、ルートに近いところ(例えば、H:\wとか)を選んで保存、とクリックしてください。自動的にPSPに入ります。
 ※PSPメモステ、ランダムアクセスおせーよ、っていう人は、好きな場所に書き出してFFCなどでコピーしてください。
4.PSPのブラウザで、「file://ms0:/w/i.html」にアクセスしてください。味気ないトップが見れます。

後はそのページをブックマークしておけば、新しくスクラップを増やしても、転送を行う時に同じ場所に保存するようにしておけば面倒が掛からないような感じで便利に使えると思います。