私の会社では標準ブラウザとしてGoogle Chromeを利用しています。
システム側から利用者に向けてブックマークを提供することがあるかと思いますが、できるだけ簡単に提供する方法が求められたりします。
プログラムで簡単にブックマーク追加できるだろうと思ったけど、意外と難しかったです。
今回は、そんなお話です。
お問い合わせ内容
Google Chromeのブックマークをワンクリックで追加できないかな?
プログラムで。
確認いたします。
(やったことないけど、簡単にできるはず・・)
問い合わせの詳細
1ポチで
お願い。
Google Chromeのブックマークを、ワンクリックで追加したいという問い合わせでした。
Chromeのメニューからブックマークのインポートを行うのではなく、プログラムファイルなどをワンクリックして追加させたいということです。
理由はITリテラシーの高くないユーザ向けに、できるだけ簡単に作業をしてもらうため、とのこと。
私的にはブックマークのインポートも簡単だと思うんですがね・・。
Chromeのブックマークはどこに保存されているのか?
Chromeのブックマークは、パソコン内の以下に保存されています。
C:¥Users\アカウント名\AppData¥Local¥Google¥Chrome¥User Data¥Default\Bookmarks
※「アカウント名」フォルダはユーザによって違います。
※「Default」フォルダもユーザによって違うことがあります。例えば、複数のGoogleアカウントを使っている場合です。
このファイルを直接書き換えるプログラムを作れば、ワンクリックでブックマークが追加できそうです。
Chromeブックマークの中身はどうなっているのか?
こんな感じになっています。
JSON形式のようでちょっと違うようです。文字コードはUTF-8です。
これをプログラムで直接書き換える、、嫌な予感しかしないですがやってみます。
ブックマーク追加プログラムを作ってみた!
実際にブックマーク追加プログラムを作ってみました。使用言語はVBSです。
思ったより面倒くさかったですが、何とか動きます。(注意:動作保証はできません)
プログラムの流れ
ファイルの5行目と6行目の間に、追加したいブックマークを文字列で挿入するシンプルな処理です。
1.ブックマークファイルの読み込み
2.ファイルの5行目までと6行目以降を分割する
3.追加したいブックマークの文字列を生成
4.2と3を合わせてブックマークファイルに書き込み
【イメージ】
プログラム内容
1.ブックマークファイルの読み込み
ポイントは、UTF-8で読み込むことです。
Dim targetFile, uName
Dim strAll, str1, str2, insrtStr
uName = CreateObject("WScript.Network").UserName
bookmarkFile = "C:\Users\" & uName & "\AppData\Local\Google\Chrome\User Data\Default\Bookmarks"
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile bookmarkFile
strAll = .ReadText
.Close
End With
2.ファイルの5行目までと6行目以降を分割
ポイントは、正規表現を駆使して5行目までの文字列と6行目以降の文字列を判別するところです。
正直ここは私もよくわからず、Google様検索で手法を検索しました。
Dim re, ma
Dim pat
Set re = New RegExp
pat = "^((?:.*\n){5})((?:.*\n)*)"
re.Pattern = pat
str1 = strAll: str2 = ""
If re.test(strAll) Then
Set ma = re.Execute(strAll)
str1 = ma(0).SubMatches(0) '5行目までの文字列
str2 = ma(0).SubMatches(1) '6行目以降の文字列
End If
3.追加したいブックマークの文字列を生成
追加したいブックマークを直にプログラムに埋め込む古典的な手法です。
ポイントは、スペースの数まできっちりとBookmarksファイルと合わせること。
少しでもずれるとブックマークが全く機能しなくなります。
insrtStr = " ""children"": [ {" & vbCrLf
insrtStr = insrtStr & " ""date_added"": ""13287982809857957""," & vbCrLf
insrtStr = insrtStr & " ""guid"": ""c0c07d83-16a2-4a69-8992-3c337d041ee7""," & vbCrLf
insrtStr = insrtStr & " ""id"": ""3""," & vbCrLf
insrtStr = insrtStr & " ""name"": ""もそもそ奮闘記""," & vbCrLf
insrtStr = insrtStr & " ""type"": ""url""," & vbCrLf
insrtStr = insrtStr & " ""url"": ""https://mosomoso-history.com/""" & vbCrLf
insrtStr = insrtStr & " }, {" & vbCrLf
insrtStr = insrtStr & " ""date_added"": ""13287982862293273""," & vbCrLf
insrtStr = insrtStr & " ""guid"": ""283b0fb7-71e7-4f65-a554-837db19c0ace""," & vbCrLf
insrtStr = insrtStr & " ""id"": ""4""," & vbCrLf
insrtStr = insrtStr & " ""name"": ""PostPrime""," & vbCrLf
insrtStr = insrtStr & " ""type"": ""url""," & vbCrLf
insrtStr = insrtStr & " ""url"": ""https://postprime.com/""" & vbCrLf
insrtStr = insrtStr & " } ]," & vbCrLf
insrtStr = insrtStr & " ""date_added"": ""13287982700928297""," & vbCrLf
insrtStr = insrtStr & " ""date_modified"": ""13287983001719293""," & vbCrLf
insrtStr = insrtStr & " ""guid"": ""96ff97c4-3549-436b-8693-ec888f239819""," & vbCrLf
insrtStr = insrtStr & " ""id"": ""2""," & vbCrLf
insrtStr = insrtStr & " ""name"": ""おすすめリンク""," & vbCrLf
insrtStr = insrtStr & " ""type"": ""folder""" & vbCrLf
insrtStr = insrtStr & " }, {" & vbCrLf
4.2と3を合わせてブックマークファイルに書き込み
ここもポイントは、UTF-8で処理するくらいです。
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.WriteText str1 & insrtStr & str2 '文字列結合
.SaveToFile bookmarkFile, 2
.Close
End With
MsgBox "ブックマークを追加しました。良い一日を!"
実際の動きはどうなるか
1.作ったプログラム(.vbs)を実行します。
2.エラーがなければ、ポップアップが表示されます。
3.Chromeにブックマークが追加されています。
※Chromeを開いていた場合は、再起動すると反映されます。
確実に動くわけではない
Google公式の方法ではないので、確実に動くことはもちろん保証できません。
確認した限り、以下のようなケースでうまく動きませんでした。
ケース1:Chromeで一度もブックマークを作っていない場合
⇒そもそもBookmarksというファイルができていないのでエラーになります。
ケース2:Googleアカウントを複数使っている場合
⇒Bookmarksというファイルの存在するフォルダがDefaultではないため、エラーになるか何も起こりません。
まとめ
1.Google Chromeのブックマークをワンクリックで追加するプログラムを作ってみました。
2.ブックマークのファイルに直接文字列を書き込むというシンプルな方法です。
3.何とか動きはしますが、Googleのお墨付きがある方法ではないので保証できません。
もし真似される場合は、自己責任でお願いします。
コメント