ユーザ用ツール

サイト用ツール


web_archive:archivebox

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
web_archive:archivebox [2019/08/16 18:43]
matoken
web_archive:archivebox [2019/08/19 14:21] (現在)
matoken
ライン 10: ライン 10:
 Python3製 Python3製
 MIT Licence MIT Licence
 +
 +これでだいたいのものはアーカイブできるようになる.問題はスマートフォンなどでURLが見えなく,共有ボタンがないようなもの.proxyを立ててそれのlogを元にスクレイピングすればいけそう.
 +ゲームなども引っかかるだろうけどそれは除外しないとBANされそう><​
  
 ## 導入 ## 導入
ライン 108: ライン 111:
  
 ### pocketのfeedをArchive ### pocketのfeedをArchive
 +
 +ArchiveBoxで紹介されている方法ではPocket側でRSSを一般公開してそのFeedを指定する
 +* [Pocket: プライバシー管理](https://​getpocket.com/​privacy_controls/​)
 +
 +```
 +RSS フィード
 +あなたの RSS フィードは非公開で、パスワードで保護されています - RSS フィードのパスワード保護を解除.
 +注:フィードリーダーによっては、パスワード保護されているフィードを読めない場合があります.
 +```
 +
 +```
 +RSS フィード
 +あなたの RSS フィードは公開されています - RSS フィードをパスワードで保護
 +
 +すべてのアイテムフィード
 +```
 +
 +https://​getpocket.com/​users/​*sso1456706866592e34/​feed/​all
 +
 +```
 +$ ./archive https://​getpocket.com/​users/​*sso1456706866592e34/​feed/​all
 +```
 +
 +APIを使うとタグを指定したりと細かく制御可能
 +
 +* [API経由でpocketに投稿した記事を取得してみたけどRSSで十分だった – matoken'​s meme](https://​matoken.org/​blog/​2019/​08/​16/​i-tried-to-get-an-article-posted-to-pocket-via-api-but-rss-was-enough/​)
 +
 +### Firefoxの履歴
 +
 +プロファイルの場所は `~/​.mozilla/​firefox/​profiles.ini` の内容を確認したり,`$ firefox --ProfileManager` が参考になる.
 +
 +```
 +$ bin/​archivebox-export-browser-history --firefox ~/​.mozilla/​firefox/​nern0ad8.default/​places.sqlite
 +Firefox history exported to:
 +    output/​sources/​firefox_history.json
 +```
 +
 +この.jsonをArchiveBoxに
 +
 +```
 +$ ./archive output/​sources/​firefox_history.json
 +```
 +
 +### Chromeの履歴
 +
 +規定値のデフォルトプロファイルの場合.書き出しファイルの変更はオプションなどでは指定できないので書き出しrenameしている.
 +
 +```
 +$ bin/​archivebox-export-browser-history --chrome ~/​.config/​google-chrome/​Default/​History && mv output/​sources/​chrome_history.json output/​sources/​chrome_history_`hostname`.json
 +Chrome history exported to:
 +    output/​sources/​chrome_history.json
 +```
 +
 +この.jsonをArchiveBoxに
 +
 +```
 +$ ./archive output/​sources/​chrome_history_`hostname`.json
 +```
 +
 +### Chromiumの履歴
 +
 +規定値のデフォルトプロファイルの場合.書き出しファイルの変更はオプションなどでは指定できないので書き出しrenameしている.
 +
 +```
 +$ bin/​archivebox-export-browser-history --chrome ~/​.config/​chromium/​Default/​History && mv output/​sources/​chrome_history.json output/​sources/​chromium_history_`hostname`.json
 +Chrome history exported to:
 +    output/​sources/​chrome_history.json
 +```
 +
 +この.jsonをArchiveBoxに
 +
 +```
 +$ ./archive output/​sources/​chromium_history_`hostname`.json
 +```
 +
 +## 問題
 +
 +### 海外のサーバを利用するとその国の言語になる
 +
 +ログインして設定できるサイトであればArchiveBoxで利用しているプロファイルでログインして設定しておく
 +
 +### 海外のサーバを利用すると404
 +
 +日本のproxyを使うか日本IPのサーバを使うくらい?​
 +
 +
 +### json.decoder.JSONDecodeError:​ Extra data
 +
 +```
 +$ ./archive
 +Traceback (most recent call last):
 +  File "​./​archive",​ line 136, in <​module>​
 +    main(*sys.argv)
 +  File "​./​archive",​ line 98, in main
 +    update_archive_data(import_path=import_path,​ resume=resume)
 +  File "​./​archive",​ line 106, in update_archive_data
 +    all_links, new_links = load_links_index(out_dir=OUTPUT_DIR,​ import_path=import_path)
 +  File "/​home/​matoken/​usr/​local/​ArchiveBox/​archivebox/​index.py",​ line 61, in load_links_index
 +    existing_links = parse_json_links_index(out_dir)
 +  File "/​home/​matoken/​usr/​local/​ArchiveBox/​archivebox/​index.py",​ line 108, in parse_json_links_index
 +    links = json.load(f)['​links'​]
 +  File "/​usr/​lib/​python3.7/​json/​__init__.py",​ line 296, in load
 +    parse_constant=parse_constant,​ object_pairs_hook=object_pairs_hook,​ **kw)
 +  File "/​usr/​lib/​python3.7/​json/​__init__.py",​ line 348, in loads
 +    return _default_decoder.decode(s)
 +  File "/​usr/​lib/​python3.7/​json/​decoder.py",​ line 340, in decode
 +    raise JSONDecodeError("​Extra data", s, end)
 +json.decoder.JSONDecodeError:​ Extra data: line 84619 column 2 (char 4486926)
 +```
 +
 +```
 +$ git status
 +On branch master
 +Your branch is up to date with '​origin/​master'​.
 +
 +Untracked files:
 +  (use "git add <​file>​..."​ to include in what will be committed)
 +
 +        output/
 +
 +nothing added to commit but untracked files present (use "git add" to track)
 +```
 +
 +`output` ディレクトリ以外はcleanなので書き出し先を変えてみると動作した
 +
 +```
 +$ OUTPUT_DIR=`mktemp -d` ./archive https://​wiki.matoken.org/​
 +```
 +
 +error message からjsonが怪しい気がするのでoutput/​index.jsonを確認
 +```
 +$ cat output/​index.json | jq . > /dev/null
 +parse error: Invalid numeric literal at line 84619, column 8
 +```
 +
 +ArchiveBoxのエラーメッセージと同じ行を指しているみたい
 +```
 +json.decoder.JSONDecodeError:​ Extra data: line 84619 column 2 (char 4486926)
 +```
 +
 +その当たりを表示してみると確かに壊れているよう
 +```
 +$ head -n 84622 output/​index.json | tail
 +                "/​home/​matoken/​usr/​local/​ArchiveBox/​output/​sources/​stdin-1566136172.txt",​
 +                "/​home/​matoken/​usr/​local/​ArchiveBox/​output/​sources/​stdin-1566134372.txt",​
 +                "/​home/​matoken/​usr/​local/​ArchiveBox/​output/​sources/​stdin-1566132203.txt"​
 +            ]
 +        }
 +    ]
 +}estamp":​ "​1565127715",​
 +            "​title":​ "<​title>​tkmiz:​ \u8a00\u8449\u306f\u6050\u308d\u3057\u3044</​title>",​
 +            "​tags":​ "",​
 +            "​sources":​ [
 +```
 +
 +手で修正したらまた動くようになった.
 +
 +
 +
 +### 一部のページでエラーとなり取得できない
 +
 +```
 +$ ./archive https://​www.mbc.co.jp/​news/​
 +[*] [2019-08-16 18:53:59] Downloading https://​www.mbc.co.jp/​news/​
 +[!] Failed to download https://​www.mbc.co.jp/​news/​
 +
 + '​utf-8'​ codec can't decode byte 0x8e in position 181: invalid start byte
 +```
 +
 +起こるページは文字コードがShift_JISのよう
 +
 +```
 +$ curl -s https://​www.mbc.co.jp/​news/​ | grep -i charset=
 +<meta http-equiv="​content-type"​ content="​text/​html;​ charset=Shift_JIS"​ />
 +<script type="​text/​javascript"​ src="​js/​scrollsmoothly.js"​ charset="​utf-8"></​script>​
 +<link rel="​stylesheet"​ type="​text/​css"​ href="/​css/​mbc_menu_import.css"​ charset="​Shift-JIS">​
 +<SCRIPT language="​JavaScript"​ src="/​js/​mbcmenu.js"​ charset="​Shift-JIS"></​SCRIPT>​
 +```
 +
 +試しに小さなShift_JISのページを作ってみる
 +
 +```
 +$ echo '<​html>​
 +<​head>​
 +<meta http-equiv="​content-type"​ content="​text/​html;​ charset=Shift_JIS"​ />
 +</​head>​
 +<​body>​
 +こんにちは
 +</​body>​
 +</​html>'​ | iconv -f UTF8 -t SJIS > hello_sjis.html
 +```
 +
 +エラーになった
 +```
 +$ ./archive http://​167.86.112.42/​hello_sjis.html
 +[*] [2019-08-16 19:02:10] Downloading http://​167.86.112.42/​hello_sjis.html
 +[!] Failed to download http://​167.86.112.42/​hello_sjis.html ​                                                                                                                     ​
 +
 +     '​utf-8'​ codec can't decode byte 0x82 in position 103: invalid start byte
 +```
 +
 +* [Error if the character code is Shift_JIS · Issue #257 · pirate/​ArchiveBox · GitHub](https://​github.com/​pirate/​ArchiveBox/​issues/​257)
 +
 +
 +### json.decoder.JSONDecodeError:​ Expecting property name enclosed in double quotes: line 30575 column 303 (char 1611858) ​                                                          
 +
 +
 +```
 +Traceback (most recent call last):
 +  File "​./​archive",​ line 136, in <​module>​
 +    main(*sys.argv)
 +  File "​./​archive",​ line 98, in main
 +    update_archive_data(import_path=import_path,​ resume=resume)
 +  File "​./​archive",​ line 118, in update_archive_data
 +    archive_link(link_dir,​ link)
 +  File "/​home/​matoken/​usr/​local/​ArchiveBox/​archivebox/​archive_methods.py",​ line 109, in archive_link ​                                                                           ​
 +    patch_links_index(link)
 +  File "/​home/​matoken/​usr/​local/​ArchiveBox/​archivebox/​index.py",​ line 177, in patch_links_index ​                                                                                
 +    json_file_links = parse_json_links_index(out_dir)
 +  File "/​home/​matoken/​usr/​local/​ArchiveBox/​archivebox/​index.py",​ line 108, in parse_json_links_index ​                                                                           ​
 +    links = json.load(f)['​links'​]
 +  File "/​usr/​lib/​python3.7/​json/​__init__.py",​ line 296, in load
 +    parse_constant=parse_constant,​ object_pairs_hook=object_pairs_hook,​ **kw)
 +  File "/​usr/​lib/​python3.7/​json/​__init__.py",​ line 348, in loads
 +    return _default_decoder.decode(s)
 +  File "/​usr/​lib/​python3.7/​json/​decoder.py",​ line 337, in decode
 +    obj, end = self.raw_decode(s,​ idx=_w(s, 0).end())
 +  File "/​usr/​lib/​python3.7/​json/​decoder.py",​ line 353, in raw_decode
 +    obj, end = self.scan_once(s,​ idx)
 +json.decoder.JSONDecodeError:​ Expecting property name enclosed in double quotes: line 30575 column 303 (char 1611858)
 +```
 +
 +jsonの該当行を見ると `https://​www.mbc.co.jp/​` のコンテンツだった.恐らく[[web_archive:​archivebox#​一部のページでエラーとなり取得できない]] と同じ問題
  
web_archive/archivebox.1565948603.txt.gz · 最終更新: 2019/08/16 18:43 by matoken