GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

pirate

bookmark-archiver – 🗄 Pocket / Pinboard / Bookmarks / RSSを使用してスター付きのすべてのウェブサイト..

投稿日:

🗄 Pocket / Pinboard / Bookmarks / RSSを使用してスター付きのすべてのウェブサイトのアーカイブされたコピーを保存します。 ブラウズ可能なhtmlを出力します。 https://sweeting.me/bookmark-archiver

アーカイブアーカイバ

"Your own personal Way-Back Machine"

クイックスタート | 詳細 | 設定 | 手動設定 | トラブルシューティング | 変更ログ | 寄付する


ブックマークしたすべてのウェブサイトのアーカイブされたコピーを保存します(ブックマークのリストだけでなく、各サイトの実際のコンテンツ )。

  • ブラウザのブックマーク(Chrome、Firefox、Safari、IE、Opera)
  • ポケット
  • ピンボード
  • RSS
  • Shaarli、Delicious、Instapaper、Reddit保存済みの投稿、Wallabag、Unmark.itなどがあります。

各サイトの閲覧可能な静的HTMLアーカイブ、PDF、スクリーンショット、archive.org上のコピーへのリンクを出力します。これらはすばらしいhtml&jsonファイルでインデックスされています。

デモ:sweeting.me/pocket

クイックスタート

1.あなたのURLのリストを入手する:

各サービスからブックマークをエクスポートする方法については、こちらのリンクを参照してください。

(これらのリンクのいずれかが壊れている場合は、問題を提出して修正します)

2.アーカイブを作成します。

git clone https://github.com/pirate/bookmark-archiver
cd bookmark-archiver/
./setup.sh                                      # install all dependencies
./archive ~/Downloads/bookmark_export.html      # replace with the path to your export file from step 1

# OR
./archive https://getpocket.com/users/yourusername/feed/all  # url to an RSS, html, or json links file

3.完了!

あなたはあなたのアーカイブを見るためにservice/index.htmlを開くことができます。 (ダウンロードが完了すると、各タイトルの隣にファビコンが表示されます)

他の人と共有するためにあなたのアーカイブをどこかにホストしたい場合は、下記の「あなたのアーカイブを公開する」を参照してください。

4.(オプション)毎日実行するようにスケジュールする

任意のローカルファイルパスまたはフィードURLからリンクをインポートするには、2番目の引数をarchive.py変更します。 Bookmark Archiverは複数回インポートされたリンクを無視し、見た目の最も古いバージョンを保持します。 つまり、複数のcronジョブを追加して、毎日いくつかの異なるフィードやファイルからリンクを取得することができます。これにより、リンクが重複することなくインデックスが最新の状態に保たれます。

この例では、24時間ごとにポケットRSSフィードとエクスポートファイルをアーカイブし、出力をログファイルに保存します。

0 24 * * * yourusername /opt/bookmark-archiver/archive https://getpocket.com/users/yourusername/feed/all > /var/log/bookmark_archiver_rss.log
0 24 * * * yourusername /opt/bookmark-archiver/archive /home/darth-vader/Desktop/bookmarks.html > /var/log/bookmark_archiver_firefox.log

(上記の行を/etc/crontab追加してください)

次のステップ

何か問題がある場合は、下部のトラブルシューティングのセクションを参照してください。
オプションをカスタマイズする場合は、 設定セクションを参照してください。

コマンドラインでプログラムを走らせるよりも簡単なものを望むなら、 Pocket Premium (yay Mozilla!)とPinboard Pro (yay independent developer!)を見てみましょう。 どちらもフルテキスト検索などの機能を備えた使いやすいブックマークアーカイブを提供します。

詳細

archive.pyは、 Pocket-formatJSON-formatNetscape-format 、またはRSS形式のリンクリストを取得し、リンクされた各Webサイトのクローンをダウンロードして、ローカルまたはホストに保存できる閲覧可能なアーカイブに変換するスクリプトですオンライン。

アーカイバは、 index.htmlindex.json 、およびすべてのサイトのアーカイブされたコピーを含む出力フォルダhtml/を生成し、タイムスタンプブックマークで整理します。 それは、 ヘッドレスクロムと良い ‘ol wgetによって駆動されます。

保存するサイトごとに:

  • サイトのwget(例: en.wikipedia.org/wiki/Example.html 、存在しない場合は.htmlを追加)
  • screenshot.png 1440×900ヘッドレスクロムを使用したサイトのスクリーンショット
  • output.pdfヘッドレスクロムを使用したサイトの印刷PDF
  • archive.org.txt保存されたサイトへのリンク
  • audio/ video/ 、youtube、soundcloudなどのサイト用(youtube-dlを使用)(WIP)
  • github、bitbucket、またはgitlabリンク(WIP)のリポジトリのcode/クローン
  • index.jsonリンク情報とアーカイブの詳細を含むJSONインデックス
  • index.htmlリンク情報とアーカイブの詳細を含むHTMLインデックス(オプションのfancyまたはsimpleインデックス)

Wgetはログインする必要があるサイトでは動作しませんが、クロムヘッドレスの場合はCHROME_USER_DATA_DIR 設定 *セクションを参照してCHROME_USER_DATA_DIR

大規模な輸出と推定ランタイム:

1000件の記事をダウンロードするのに約1時間かかることがわかっていて、約1GBを使います。
これらの数値は、i5マシンで50mbpsダウンしてシングルスレッド化したものです。 YMMV。

resume機能を使用するか、export.htmlを手動で複数のファイルに分割することで、並列で実行できます。

./archive export.html 1498800000 &  # second argument is timestamp to resume downloading from
./archive export.html 1498810000 &
./archive export.html 1498820000 &
./archive export.html 1498830000 &

ユーザーは、50k +のブックマークを付けて実行していると報告しています(実行中にRAMが増えます)。

構成

環境変数を使ってパラメータを微調整したり、 config.py直接編集することができます:

env CHROME_BINARY=google-chrome-stable RESOLUTION=1440,900 FETCH_PDF=False ./archive ~/Downloads/bookmarks_export.html

シェルオプション:

  • colorize console ouput: USE_COLOR値:[ True ] / False
  • 進捗バーを表示: SHOW_PROGRESS値:[ True ] / False
  • アーカイブ出力ディレクトリ: ARCHIVE_DIR値:[ . ] / '/var/www/archive' / ...
  • アーカイブ権限: ARCHIVE_PERMISSIONS値:[ 755 ] / 644 / ...

依存関係のオプション:

  • Chromeへのパス: CHROME_BINARY値:[ chromium-browser ] /usr/local/bin/google-chrome / ...
  • wgetへのパス: WGET_BINARY値:[ wget ] /usr/local/bin/wget / ...

アーカイブオプション:

  • リンクあたりの最大ダウンロード時間:タイムアウト値:[ 60 ] / 30 / ...
  • アーカイブメソッド(値:[ True ] / False ):
    • wgetを使用してページをフェッチする: FETCH_WGET
    • wget: FETCH_WGET_REQUISITES使ってimages / css / jsを取得してFETCH_WGET_REQUISITES (本当にお勧めします)
    • PDFとしてページを印刷する: FETCH_PDF
    • そのページのスクリーンショットを取得する: FETCH_SCREENSHOT
    • そのページのfaviconを取得する: FETCH_FAVICON
    • archive.orgにページを送信する: SUBMIT_ARCHIVE_DOT_ORG
  • スクリーンショット: RESOLUTION値:[ 1440,900 ] / 1024,768 / ...
  • ユーザエージェント: WGET_USER_AGENT値:[ Wget/1.19.1 ] / "Mozilla/5.0 ..." / ...
  • chromeプロファイル: CHROME_USER_DATA_DIR値:[ ~/Library/Application\ Support/Google/Chrome/Default ] / /tmp/chrome-profile / ...ユーザーがログインする必要があるサイトをキャプチャするには、クロムプロファイル(ユーザーがログインするために必要なCookieを読み込みます)。 既存のクロムプロファイルがない場合は、 chromium-browser --disable-gpu --user-data-dir=/tmp/chrome-profile 、必要なサイトにログインします。 次に、 CHROME_USER_DATA_DIR=/tmp/chrome-profileを設定して、Bookmark Archiverがそのプロファイルを使用するようにします。

インデックスオプション:

  • htmlインデックステンプレート: INDEX_TEMPLATE値:[ templates/index.html ] / ...
  • htmlインデックス行テンプレート: INDEX_ROW_TEMPLATE値:[ templates/index_row.html ] / ...
  • htmlリンクインデックステンプレート: LINK_INDEX_TEMPLATE値:[ templates/link_index_fancy.html ] / templates/link_index.html / ...
  • HTMLテンプレートのstaticfiles: TEMPLATE_STATICFILES値:[ templates/static ] / ...
  • htmlテンプレートフッターテキスト: FOOTER_INFO値:[ Content is hosted for personal archiving purposes only. Contact server owner for any takedown requests. Content is hosted for personal archiving purposes only. Contact server owner for any takedown requests. ] / ...

config.pyの上部にあるdefaults&moreを参照してください)

出力されたhtmlインデックスファイルのルック&フィールを調整するには、 templates/別の場所にあるファイルをコピーして編集してください。 上の2つのインデックス設定変数を使用して、スクリプトを新しいカスタムテンプレートファイルに指定します。

クロム/クロム依存性はオプションで 、スクリーンショットやPDF出力にのみ必要です。これらの両方が無効になっている場合は無視しても問題ありません。

アーカイブを公開する

./archiveによって生成されたアーカイブは、静的なhtmlをホストできる任意のプロバイダ(eg github pages!)にサービスするのに適しています。

出力されたhtmlフォルダをWebディレクトリ(例えば/var/www/bookmark-archiverアップロードし、Webサーバを設定することで、ホームサーバやVPSから提供することもできます。

アーカイブフォルダを提供するサンプルのnginx設定を以下に示します。

location / {
    alias       /var/www/bookmark-archiver/;
    index       index.html;
    autoindex   on;               # see directory listing upon clicking "The Files" links
    try_files   $uri $uri/ =404;
}

CGIやPHPなどのコンテンツを実行していないことを確認してください。静的なファイルのみを提供したいだけです。

URLは次のようになりますhttps://archive.example.com/archive/1493350273/en.wikipedia.org/wiki/Dining_philosophers_problem.html ://archive.example.com/archive/1493350273/en.wikipedia.org/wiki/Dining_philosophers_problem.html

セキュリティ警告およびコンテンツ免責事項

他の人のコンテンツを再ホストすることは、ホスティングドメインを共有している他のサイトにセキュリティ上の影響を与えます。 あなたの共有ドメイン上の未知のアーカイブされたCSS&JSファイルのホスティングの危険性を理解してください 誤ってアーカイブした悪意のあるJSにはセキュリティ上のリスクがあるため、これを独自のドメインまたはサブドメインに配置して、Cookieを分離してCSRF攻撃やその他の不快感をわずかに緩和することをお勧めします。

また、検索エンジンの結果でアーカイブするすべてのリンクを公開したくない場合は、 /robots.txtアーカイブをブラックリストに登録することもできます。

アーカイブするサイトによっては、著作権上の理由でコンテンツを一般公開することができない場合があります。責任を持ってホストし、削除リクエストに適切に対応するのはあなたの責任です。

連絡先情報をインデックスのフッターに追加するには、 FOOTER_INFO設定変数を変更してください。

情報とモチベーション

これは基本的にPocket Premiumのオープンソース版です(あなたはこれを支払うことを検討すべきです!)。 オフラインで保存したサイトやURLを変更したサイトが疲れていたので、 archive.orgが提供しているThe Way-Back Machineのように、ローカルでコピーを開始しました。 あなた自身のアーカイブを自己ホストすることで、静的なHTMLに加えて、動的なサイトのPDFとスクリーンショットを保存することができます。

今、私はインターネットから消えてはいけない重要な記事やリソースを知っていても、健全に休むことができます。

私の公開されたアーカイブの例: sweeting.me/pocket

手動セットアップ

インターネットからランダムセットアップスクリプトを実行するのが好きでない場合( 👍 )、これらの手動設定の指示に従うことができます。

1.依存関係をインストールする: chromium >= 59wget >= 1.16python3 >= 3.5google-chrome >= v59もうまくいきます)

すでにGoogle Chromeをインストールしている場合、またはChromiumではなくChromeを使用する場合は、 Google Chromeの手順に従います。

# On Mac:
brew cask install chromium  # If you already have Google Chrome/Chromium in /Applications/, skip this command
brew install wget python3

echo -e '#!/bin/bash\n/Applications/Chromium.app/Contents/MacOS/Chromium "$@"' > /usr/local/bin/chromium-browser  # see instructions for google-chrome below
chmod +x /usr/local/bin/chromium-browser
# On Ubuntu/Debian:
apt install chromium-browser python3 wget
# Check that everything worked:
chromium-browser --version && which wget && which python3 && which curl && echo "[√] All dependencies installed."

2.ブックマークエクスポートファイルを取得します。

ブックマークエクスポートファイルをダウンロードするには、上記の「クイックスタート」セクションの指示に従ってください。

3.アーカイブスクリプトを実行します。

  1. このリポジトリgit clone https://github.com/pirate/bookmark-archiver
  2. cd bookmark-archiver/
  3. ./archive ~/Downloads/bookmarks_export.html

archive.py export.html 153242424324 2番目の引数を指定して、特定のタイムスタンプでアーカイブの更新を再開することもできます。

何か問題がある場合は、下部のトラブルシューティングのセクションを参照してください。

Google Chromeの手順:

Google Chromeの代わりにChromiumをおすすめします。オープンソースであり、Googleにデータを送信しないからです。 クロムにはサイトのレンダリングに問題がある可能性があるので、代わりにGoogle-chromeを試してみてください。 Google Chromeを既にインストールしている場合は、Chromiumをすべてダウンロードするよりも、Chromeを使用する方が簡単です。

  1. Google Chromeのインストールとリンク
# On Mac:
# If you already have Google Chrome in /Applications/, skip this brew command
brew cask install google-chrome
brew install wget python3

echo -e '#!/bin/bash\n/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome "$@"' > /usr/local/bin/google-chrome
chmod +x /usr/local/bin/google-chrome
# On Linux:
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
apt update; apt install google-chrome-beta python3 wget
  1. 実行する前に環境変数CHROME_BINARYgoogle-chromeに設定します。
env CHROME_BINARY=google-chrome ./archive ~/Downloads/bookmarks_export.html

Google ChromeまたはChromiumの設定に問題がある場合は、下記のトラブルシューティングのセクションをご覧ください。

トラブルシューティング

依存関係

Python:

いくつかのLinuxディストリビューションでは、python3パッケージが最新のものではないかもしれません。 これが当てはまる場合は、最新のバージョンを手動でインストールすることをお勧めします。

add-apt-repository ppa:fkrull/deadsnakes && apt update && apt install python3.6

それでもヘルプが必要な場合は、公式のPythonドキュメントを参考にしてください。

Chromium / Google Chrome:

archive.pychromium-browser / google-chrome実行可能ファイルにアクセスできるかどうかによって異なります。 使用される実行可能ファイルはchromium-browserデフォルト設定されていますが、環境変数CHROME_BINARYして手動で指定することができます:

env CHROME_BINARY=/usr/local/bin/chromium-browser ./archive ~/Downloads/bookmarks_export.html
  1. $PATH Chromeがあることを確認するテスト:
which chromium-browser || which google-chrome

実行可能ファイルが表示されていない場合は、セットアップの指示に従ってそれらのファイルをインストールしてリンクしてください。

  1. パスが表示されている場合は、次に実行可能であることを確認します。
chromium-browser --version || google-chrome --version

バージョンが表示されない場合は、設定手順を再度実行するか、Chromeにアクセスする権限があることを確認してください。

  1. バージョンが表示されていて<59場合は、それをアップグレードします。
apt upgrade chromium-browser -y
# OR
brew cask upgrade chromium-browser
  1. バージョンが表示され、バージョンが>=59 archive.py場合、 archive.pyが正しいバージョンを実行していることを確認してください:
env CHROME_BINARY=/path/from/step/1/chromium-browser ./archive bookmarks_export.html   # replace the path with the one you got from step 1

Wget&Curl:

wgetcurlがない場合は、 aptまたは選択したパッケージマネージャを使用してインストールしてください。 詳細については、「手動セットアップ」の手順を参照してください。

wgetがタイムアウトしたり、オンラインで確認されているサイトがランダムにダウンロードされない場合は、 brew upgrade wgetまたはapt upgrade wget brew upgrade wget最新バージョンにapt upgrade wget 完全な有効なサイトでwgetを失敗させたバージョン<=1.19.1_1バグがあります。

アーカイブ

エクスポートファイルから解析されたリンクはありません:

エクスポートを入手した場所の説明と問題を開いて、エクスポートファイルを添付してください(リンクを編集することができます)。 あなたのフォーマットをサポートするようにパーサーを修正します。

多くのスキップされたサイト:

アーカイバを一度実行した場合は、後でサイトを再ダウンロードすることはありません。新しいリンクをダウンロードするだけです。 まだ実行していない場合は、インターネットに接続していることと、解析されたURLが正しいかどうかを確認してください。 archive.py出力またはindex.htmlをチェックして、ダウンロードしているリンクを確認することができます。

それでも問題が解決しない場合は、 service/archiveフォルダを削除または移動してarchive.py再度実行してみてください。

たくさんのエラー:

すべての依存関係がインストールされており、ブラウザからのリンクを正常に訪問できることを確認してください。 それでも問題が解決しない場合は、エラーの説明を含む問題を開きます。

インデックスからの壊れたリンクがたくさんあります:

すべてのサイトを各方法で効果的にアーカイブできるわけではないため、 wget 、PDF、スクリーンショットの組み合わせを使用するのが最適です。 アーカイブのサイトの10〜20%以上が壊れているように見える場合は、アーカイブに失敗したURLの問題を開いて調査します。

アーカイブのホスティング

nginx経由でアーカイブをホストする際に問題がある場合は、SSLでnginxを実行していることを確認してください。 あなたは、Googleの周りにない場合は、その設定を得るのを助けるためのチュートリアルがたくさんあります。 特定のnginx設定に問題がある場合は、問題を開きます。

ロードマップ

PRに貢献したいと思えば、これらのタスクのいくつかは非常に簡単です。 あなたが何らかの方法で始めるのを助ける必要がある場合は、いつでも問題を開くことができます!

  • youtube videosからclosed-captionのテキストをダウンロードする
  • 間違いを使った本文の抽出
  • 重要な抽出単語に基づく自動タグ付け
  • youtube-dlによるオーディオ&ビデオアーカイブ
  • elasticsearch / elasticlunr / agを使用した全文索引作成
  • フルテキストインデックスビデオコンテンツ用のビデオ字幕ダウンロード
  • 要約ライブラリによる記事の自動テキスト要約
  • 特徴画像抽出
  • httpサポート(httpsのみのドメインから)
  • archive.org( https://github.com/hartator/wayback-machine-downloader )からデッドサイトを削除してみてください
  • ポケット/ピンボードからのライブアップデート

HTMLエクスポートをダウンロードする代わりに、ポケットAPIまたはパブリックポケットRSSフィード経由でリンクをプルすることは可能です。 これを行うスクリプトを書いたら、これをcron貼り付け、それを自分自身で自動更新させることができます。

今のところril_export.htmlをダウンロードし、更新するたびにarchive.pyを実行するだけです。 スクリプトは、すでにアーカイブされていない新しいリンクのみをダウンロードするため、後で高速に実行されます。

リンク

同様のプロジェクト:

  • Memex by Worldbrain.ioあなたのすべての履歴を保存し、全文検索を行うブラウザの拡張機能
  • Hypothes.isはWeb / pdf / ebook注釈ツールで、コンテンツもアーカイブします
  • Perkeep ” Perkeepはあなたの人生を永久に保つことができます。 “
  • Fetching.ioあなたがブックマークしたすべてのアーカイブされたウェブサイトを検索できるパーソナル検索エンジン/アーカイバ
  • Shaarchiver Firefox、Shaarli、またはDeliciousブックマークとすべてのリンクメディアをアーカイブし、マークダウン/ HTMLインデックスを生成する、非常に似たプロジェクト
  • Webrecorder.ioフルブラウジングセッションを保存し、すべてのコンテンツをアーカイブする
  • Wallabagあなたがローカルまたはあなたの携帯電話で読んだ記事を保存する

ディスカッション:

ツール/その他:

変更ログ

  • リリースされたv0.0.3
  • chromeのサポート--user-data-dirログインが必要なサイトをアーカイブするための--user-data-dir
  • 各リンクの個別のhtmlとjsonの魅力的なインデックス
  • 上書きするのではなく、既存のインデックスに新しいリンクをスマートに追加する
  • リリースされたv0.0.2
  • 書式文字列の代わりに適切なHTMLテンプレート( https://github.com/bardisty !ありがとう!)
  • 個別のファイルにリファクタリングし、オーディオとビデオのアーカイブをワイプする
  • リリースされたv0.0.1
  • インデックスリンクはnginxのURLの書き換えなしで動作するようになり、アーカイブはgithubページでホストできるようになりました
  • setup.shスクリプト&docstrings&helpコマンドが追加されました
  • Google Chromeの代わりにChromiumをデフォルトにした(無料のソフトウェア)
  • 変数が追加されました( https://github.com/hannah98 !ありがとうございます)。
  • ポケットアーカイブストリームから名前を変更 – > ブックマークアーカイバ
  • Netscape形式のエクスポートサポートが追加されました( https://github.com/ilvar !)
  • Pinboard形式のエクスポートサポートが追加されました( https://github.com/sconeyard !)
  • HNのフロントページ、おっと! 明らかに私は今サポートするユーザーがいる 😁
  • ポケットフォーマットエクスポートのサポートを追加
  • v0.0.0リリース:作成されたポケットアーカイブストリーム2017/05/05

寄付

このプロジェクトは、エンジニアリングの努力をさらに盛り上げることができますが、それがサポートできない限り
私は財政的に私はそれだけで次のレベルにそれを取ることができるとは思わない。 それはすでに可愛い
機能的で堅牢ですが、実際には次のレベルに移行する必要があります
才能のあるエンジニア。 あなたまたはあなたの財団がこのプロジェクトを長期的にスポンサーにしたい場合は、
私はbookmark-archiver@sweeting.meで

助成金/寄付







-pirate
-, , , , , , , , , , , ,

執筆者: