eagle API でブラウザのブックマークを一括で登録する

ファイル管理アプリの eagle には、eagle API の機能が用意されています。この記事では、その eagle API を使って GoogleChrome に登録している大量のブックマークを eagle に一括で登録する方法を紹介します。

eagle API を使うことで、人力では難しいような多量のファイルを効率よく扱うことができます。この記事では、GoogleChrome のブックマークを例にして紹介しますが、他にも iTunes から音楽ファイルを登録したり、GooglePhotos から写真データを登録したり、さまざまな応用が可能です。

eagle と eagle API

eagle とは

eagle は画像や動画や音声などファイルを管理に特化したアプリです。アプリ開発や動画編集など多くの種類のファイルを扱いケースにおいて、非常に便利なアプリです。30日間は無料で試すことができますので、一度使ってみることをおすすめします。

以前に eagle を紹介した記事を書きましたので、そちらを読んでいただけると eagle の良さがより分かると思います。

eagle でWebページを管理する

eagle はファイルだけでなく、Webページも管理できます。

eagle には GoogleChrome や Safari などのブラウザの拡張機能が用意されていて、ボタン1つでそのWebページのブックマークを登録したり、その Webページ全体のスクショ画像を登録したりすることができます。

eagle API とは

eagle API は、外部から eagle を操作することができる機能です。

外部から eagle を操作できると何がいいのでしょうか。

例えば、一万個のブックマークを eagle に登録したいとします。先ほど紹介した eagle のブラウザ拡張機能を使えば、ワンクリックで表示している Webサイトを eagle に登録できます。ですが、一万個のブックマークを登録する場合、多くの時間と手間がかかります。数が多く、同じ作業を繰り返す場合は、プログラムで自動化したいですよね。

そこで、eagle API です。外部から eagle を操作できると、プログラムでブックマークの登録作業を自動化できます。これなら、一万個でも百万個でも簡単にブックマークを登録できます。

eagle には eagle API の詳細なマニュアルが用意されています。そちらを参照することで簡単に eagle を操作することができます。

eagle API でブックマークを一括登録する

処理の全体像

それでは eagle API を実際に使ってみます。

今回は「GoogleChrome に大量のブックマークがあり、それを eagle 上で管理できるようにする」を例に eagle API を紹介します。

進め方の手順は、まず、GoogleChrome のブックマークをエクスポートします。そして、そのエクスポートファイルを Pythonスクリプトで読み込み、eagle API を通して eagle にブックマーク情報を一括で登録するようにします。

GoogleChrome のブックマークをエクスポートする

Chrome にはブックマークをエクスポートする機能があります。まず、ブックマークをファイルに出力させます。Chrome の右上のメニューから「ブックマーク マネージャ」を開きます。

ブックマーク マネージャ

そして、再度右上のメニューから「ブックマークをエクスポート」します。

ブックマークをエクスポート

出力したファイルを bookmark.html という名前で保存しておきます。

Pythonスクリプトでブックマークを eagle に登録する

ここからは、Pythonスクリプトで以下の手順で処理をしていきます。

  1. Chrome のブックマークを読み込む
  2. ブックマークのサイトにアクセスしてスクリーンショットをキャプチャする
  3. キャプチャした画像を base64 形式に変換する
  4. eagle にブックマークの URL とキャプチャ画像を登録する

1. Chrome のブックマークを読み込む

Chrome からブックマークをエクスポートしたファイルは HTML 形式です。そこで、python で HTML を扱うために Beautiful Soup 4 を用います。

コンソール上で以下のコマンドでインストールします。

pip install bs4

あとは、ブックマークをエクスポートした HTMLファイルを読み込んで、ブックマークの名前と URL を取得します。以下のスクリプトでそれらの情報を取得してきます。

import bs4

# Chromeのブックマークを読みこむ
soup = bs4.BeautifulSoup(open('bookmarks.html'), 'html.parser')
# 全てのaタグ要素を取得
bookmarks = soup.find_all('a') 

for bookmark in bookmarks: 
  url  = bookmark.get('href') # ブックマークのURL
  name = bookmark.text.       # ブックマークの名前

2. ブックマークのサイトのスクリーンショットを撮る

eagle のブックマークには、サイトの画像も合わせて管理できます。そこで、ブックマークのサイトのスクリーンショット画像を撮影します。Chrome を操作して、サイトにアクセスして、スクショ画像を撮影します。

Chrome を操作するために ChromeDriver を使用します。ChromeDriver は以下のサイトにアクセスしてダウンロードします。使用している Chrome と同じバージョンの ChromeDriver をダウンロードしてください。

次に、Python で ChromeDriver を扱うために selenium をインストールします。以下のコマンドをコンソールで入力するとインストールできます。

pip install selenium

これで環境が整ったので、以下の Pythonスクリプトで Webサイトにアクセスして、キャプチャ画像を撮影できます。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# サイトにアクセスするためのdriverを作成
options = Options() 
options.add_argument('--hide-scrollbars') # スクロールバーを非表示
options.add_argument('--headless')        # ブラウザを表示しない
driver = webdriver.Chrome('./chromedriver',options=options)
driver.implicitly_wait(1)

# Webサイトにアクセスしてキャプチャ画像を保存する
url = "google.com";
driver.set_window_size(1024, 768)    # 画像サイズ
driver.get(href)                     # サイトへアクセス
driver.save_screenshot('result.png') # スクショを撮影

3. キャプチャ画像をbase64に変換する

eagle のブックマークが扱う画像フォーマットが base64 という形式です。そこで、先ほどのキャプチャ画像を base64形式に変換します。

import base64

# pngからbase64に変換
with open('./result.png', 'rb') as f:
  data = base64.b64encode(f.read())
  img = data.decode('utf-8')
  img = "data:image/png;base64,"+img;

4. eagle API でブックマークを登録する

先ほどまでの処理で、ブックマークの名前・URL・スクショ画像が取得できましたので、これを eagle API を使って、eagle に登録していきます。

ブックマークを登録するための eagle API のマニュアルは以下です。

以下のスクリプトで eagle に登録できます。

import requests

# eagleにブックマークを登録する
api_url = 'http://localhost:41595/api/item/addBookmark'
params = {'url':href , 'name':text , 'base64':img }
requests.post(api_url, json=params) 

全てのブックマークを登録してみる

それでは、上記のスクリプトを組み合わせて、Chrome の全てのブックマークを eagle に自動で登録させてみます。処理する Pythonスクリプトは以下のようになります。

import requests
import bs4
import base64
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# Chromeのブックマークを読みこむ
soup = bs4.BeautifulSoup(open('bookmarks.html'), 'html.parser')
# 全てのaタグ要素を取得
bookmarks = soup.find_all('a') 

# driverを生成する
options = Options() 
options.add_argument('--hide-scrollbars') 
options.add_argument('--headless')
driver = webdriver.Chrome('./chromedriver',options=options)
driver.implicitly_wait(1)

# ブックマークを1つずつ登録していく
for bookmark in bookmarks: 
  
  # aタグの情報を取得
  url = bookmark.get('href') # ブックマークのURL
  name = bookmark.text.      # ブックマークの名前

  # Webサイトにアクセスしてキャプチャ画像を保存する
  driver.set_window_size(1024, 768)
  driver.get(href)
  driver.save_screenshot('result.png')

  # pngからbase64に変換
  with open('./result.png', 'rb') as f:
    data = base64.b64encode(f.read())
    img  = data.decode('utf-8')
    img  = "data:image/png;base64,"+img; # ブックマークのスクショ

    # eagleにブックマークを登録する
    api_url = 'http://localhost:41595/api/item/addBookmark'
    params = {'url':url , 'name':name , 'base64':img }
    requests.post(api_url, json=params) 

driver.quit()

これを実行すると、以下のように eagle にブックマークが登録されます。

eagle にブックマークが追加された

まとめ

今回は、eagle API の活用について、ブラウザのブックマークの追加を例に紹介しました。

他にも eagle に別のライブラリから移行する時には、eagle API を活用すると便利になる場面がありそうです。例えば、GooglePhotoやAmazonPhotoなどから移行したり、iTunesなどから移行するときにも、ファイルだけでなく、そのタグ情報なども一緒に移行できます。

eagle は大量のファイルを扱うため、大量のファイルに対しての一括処理で eagle API が便利に使えます。