法律関連整形スクリプトの少し手直し版
国の法令検索から条文を引っ張ってきて加工するというスクリプトを
作成すべく、先に挑戦していたわけですが・・・、とてもじゃないけど
手が出ない・・・。
構造が解析できないのでうまく取れない。
それに「編」とか「節」とか「款」がうまく取れないみたい。
本文もきれるのがあるし使えないけれども、ひとまずのバックアップとして
※特許法とかの知財関連の法案が取れればいいんですけどね・・・。
機能としては
法令検索から条文のソースを引いてきて、EXCELで加工して保存します。
自分で使うのでエラー処理は甘めです。
もし使う場合は自己責任で使ってくださいね。
Googleの仕様が変わると修正が必要です。
もっときれいにできるよとか、うまく改造できる方いらっしゃったら
ご指摘いただけると幸いです。
2016/8/19 動かない箇所があったので修正版に置き換えました。
作成すべく、先に挑戦していたわけですが・・・、とてもじゃないけど
手が出ない・・・。
構造が解析できないのでうまく取れない。
それに「編」とか「節」とか「款」がうまく取れないみたい。
本文もきれるのがあるし使えないけれども、ひとまずのバックアップとして
※特許法とかの知財関連の法案が取れればいいんですけどね・・・。
機能としては
法令検索から条文のソースを引いてきて、EXCELで加工して保存します。
自分で使うのでエラー処理は甘めです。
もし使う場合は自己責任で使ってくださいね。
Googleの仕様が変わると修正が必要です。
もっときれいにできるよとか、うまく改造できる方いらっしゃったら
ご指摘いただけると幸いです。
2016/8/19 動かない箇所があったので修正版に置き換えました。
' ◆参照サイト ' ◆参照サイト ' http://www.kanaya440.com/contents/tips/vbs/007.html ' http://www.takeash.net/wiki/?VBScript ' http://d.hatena.ne.jp/ken3memo/20090903/1251991651 ' http://plaza.rakuten.co.jp/densen/diary/201310200000/ ' http://fanblogs.jp/fjt/archive/58/0 ' http://foundknownanddone.blogspot.jp/2014/05/IE-Internet-Explorer-automation-VBScript-DOM-WSH-waitIE.html ' http://so-zou.jp/software/tech/programming/vba/sample/web.htm ' http://www.koutou-software.net/junk/use-vs-project-with-vbscript.html ' http://vbsguide.seesaa.net/article/144608106.html ' http://homepage2.nifty.com/nonnon/Chinamini/20110001/20110201.html ' http://chaichan.lolipop.jp/vbtips/VBMemo2008-11-10.htm ' http://eprostation.jpn.org/vb/vbknow.html ' http://www.keep-on.com/excelyou/2000lng4/200005/00050155.txt ' http://korikorikorikori.blog.fc2.com/blog-entry-26.html ' http://excel-ubara.com/excelvba1/EXCELVBA310.html '// '// Googleで検索した法律関連ページのHTMLを取得して整形する。 '// '// Proxy環境の場合はDOSプロンプトで実行 netsh winhttp import proxy source=ie Option Explicit Dim sURI Dim rProvisions Dim saveFile Dim oFilename Dim sKeyword '// メイン部分 sKeyword = inputbox("ダウンロード対象法律名を入れてください。","検索ワード入力","特許法") If IsEmpty(sKeyword) = true Then MsgBox "キャンセルが選択されました" WScript.Quit Else If sKeyword = "" Then MsgBox "文字が入力されていません" WScript.Quit End if If InStrRev(sKeyword,"法") = 0 Then MsgBox "●●法という形で入力してください。" WScript.Quit Else oFilename = "C:\Temp\" + sKeyword +".html" End If End If sURI = getURL(sKeyword) rProvisions = getHTML(sURI) saveFile = byFile(rProvisions,oFilename) formattingHTML(oFilename) if sURI = "False" Or IsObject(rProvisions) = "True" Or saveFile = "False" then MsgBox "notComplete" else MsgBox "Complete" end if '// Googleでキーワード検索1位のURL(下に緑で出てる▼のやつ)を取得する function getURL(sKeyword) getURL = "False" Dim objIE Dim rURL Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = false objIE.Navigate("https://www.google.co.jp/search?q=" & sKeyword) Do While ObjIE.Busy = True Or ObjIE.readystate <> 4 WScript.Sleep 200 Loop '// GoogleからURL取得 rURL =objIE.document.getElementByID("ires") _ .getElementsByTagName("ol")(0) _ .getElementsByTagName("cite")(0) _ .innertext '// 有無を言わさず先頭にhttp://を付ける・・・ getURL = "http://" + rURL objIE.Quit Set objIE = Nothing end function '// 対象ページのHTMLを取得する。 function getHTML(sURI) getHTML = "False" Dim oHttp Set oHttp = CreateObject("MSXML2.XMLHTTP") oHttp.Open "GET", sURI, False oHttp.Send If (oHttp.Status <> 200 ) Then MsgBox "error:" & oHttp.Status getHTML = "False" end If getHTML = oHttp.responseBody Set oHttp = Nothing end Function '// HTMLを保存する。 function byFile(htmlBody,oFilename) byFile = "False" Dim ADODB Set ADODB = CreateObject("ADODB.Stream") With ADODB .Type = 1 'adTypeBinary .Open() .Write htmlBody .SaveToFile oFilename , 2 '1:adSaveCreateNotExist, 2:adSaveCreateOverWrite .Close End With Set ADODB = Nothing byFile = True end Function '//条文見出しと条文を加工する。 '// 取得したHTMLファイルィから条文とタイトルを取得して整形する。 '// 条件に合致した内容をEXCELの指定箇所にエクスポートする。 function formattingHTML(iFile) formattingHTML = "False" Dim workHtml '作業用一時領域 Dim outPut '出力用 Dim pChapter '章 Dim pTitle '条文見出 Dim pItem '条文 Dim pNumber '号 Dim pText '本文 Dim oXls Dim objFileSystem Dim objFile Dim objExcel Dim excelBook Dim excelSheet Dim excelCell oXls = iFile & ".xlsx" oXls = Replace(oXls,".html","") Dim textCount '整形用 Dim bodyRow '出力用行 Const firstRow = 2 Const headingRow = 1 'EXCEL1行目(タイトル行) Const chapterColumn = 1 '章 Const titleColumn = 2 '条文見出し Const itemColumn = 3 '条文 Const numberColumn = 4 '号 Const textColumn = 5 '本文 Const chapWord = "<P> <B><A NAME=" Const titleWord = "<DIV class=""arttitle"">" Const itemWord = "<DIV class=""item""><B>" Const numberWord = "<DIV class=""number""><B>" Const textWord = "。" '// 元のHTMLオープン Set objFileSystem = CreateObject("Scripting.FileSystemObject") Set objFile = objFileSystem.OpenTextFile(iFile) '// EXCELオープン Set objExcel = CreateObject("Excel.Application") objExcel.Visible = False objExcel.DisplayAlerts = False objExcel.WorkBooks.Add Set excelBook = objExcel.WorkBooks(objExcel.WorkBooks.Count) Set excelSheet = excelBook.Worksheets(1) '// 見出し作成,出力位置を2列目からに指定 excelSheet.Cells(headingRow,chapterColumn).Value = "章" excelSheet.Cells(headingRow,titleColumn).Value = "条文見出し" excelSheet.Cells(headingRow,itemColumn).Value = "条" excelSheet.Cells(headingRow,numberColumn).Value = "号" excelSheet.Cells(headingRow,textColumn).Value = "本文" bodyRow = firstRow outPut = "" textCount = firstRow Do Until objFile.atEndOfStream If textCount > bodyRow Then bodyRow = textCount End if workHtml = objFile.readline If InStr(workHtml,chapWord) <> 0 Then pChapter = workHtml pChapter = htmlReplace(pChapter) excelSheet.Cells(bodyRow,chapterColumn).Value = pChapter End if If InStr(workHtml,titleWord) <> 0 Then pTitle = workHtml pTitle = htmlReplace(pTitle) excelSheet.Cells(bodyRow,titleColumn).Value = pTitle End if If InStr(workHtml,itemWord) <> 0 Then pItem = workHtml pItem = htmlReplace(pItem) excelSheet.Cells(bodyRow,itemColumn).Value = pItem End if if InStr(workHtml,numberWord) <> 0 Then pNumber = workHtml pNumber = htmlReplace(pNumber) excelSheet.Cells(bodyRow,numberColumn).Value = pNumber End if if InStr(workHtml,textWord) <> 0 Then pText = workHtml pText = htmlReplace(pText) excelSheet.Cells(bodyRow,textColumn).Value = pText textCount = textCount + 1 End if Loop '// セル幅整形 excelSheet.Activate excelSheet.Columns(chapterColumn).AutoFit excelSheet.Columns(titleColumn).ColumnWidth = 73.25 excelSheet.Columns(itemColumn).ColumnWidth = 16.38 excelSheet.Columns(numberColumn).AutoFit if Err.Number <> 0 then MsgBox( "EXCEL処理失敗:" & Err.Description ) end if excelBook.SaveAs(oXls) objExcel.DisplayAlerts = True objExcel.Visible = True objExcel.Quit Set objExcel = Nothing objFile.Close objFileSystem.DeleteFile(iFile) If Err.Number <> 0 Then MsgBox "一時ファイル削除失敗: " & Err.Description End If Set objFile = Nothing Set objFileSystem = Nothing end function ' https://sites.google.com/site/scriptmakerms/scriptmakerms/regular_expression/tag '// HTMLタグを取り除く Function htmlReplace(str1) Dim regEx Dim patrn Dim replStr patrn="<(""[^""]*""|'[^']*'|[^'"">])*>" replStr="" Set regEx = New RegExp regEx.Pattern = patrn regEx.Global = True regEx.IgnoreCase = True htmlReplace = regEx.Replace(str1, replStr) End Function '// IEがビジー状態の間待ちます Sub waitIE(ie) Do While ie.Busy = True Or ie.readystate <> 4 WScript.Sleep 100 Loop WScript.Sleep 1000 End Sub
コメント
'// GoogleからURL取得
rURL =objIE.document.getElementByID("ires") _
.getElementsByTagName("cite")(0) _
.innertext