コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:にょきにょき/botを使ったリンク切れの調べ方

httplib2 について
インストールに関しては私も正直よく覚えていないので、あまり当てにならないかもしれません。MW:Manual:Pywikibot/Installation/jaにあるように、pip install -r requirements.txt を実行すれば大丈夫だったんじゃないかなと思います。とりあえず環境変数は関係なかったと思います。
igonorelist について
これはコンフィグというよりはプログラムの書き換えに相当しますので設定例は無いと思います(多分)。私の場合は、
  1. オリジナルは改変したくないため、weblinkchecker.py を pmdachecker.py として複製する。
  2. pmdachecker.py の ignorelist に re.compile(r'^(?!.*www\.info\.pmda\.go\.jp/go/(interview|pack)/).+$'), を追加。
と、しました。これにより、www.info.pmda.go.jp/go/interview/ または www.info.pmda.go.jp/go/pack/ が含まれないURLはチェックされないようになります。これがないと、すべての外部リンクについてリンク切れかどうか調べるため効率が悪くなります。正規表現は一例ですので他にも調べたい外部リンクがあるのなら、改変する必要があります。
実動作(コマンドライン)
私は python pwb.py pmdachecker "-weblink:www.info.pmda.go.jp/go/" "-ns:0" "-max_external_links:5" "-day:0" で動作テストしました。
"-weblink:www.info.pmda.go.jp/go/" は特別:外部リンク検索において www.info.pmda.go.jp/go/ を検索パターンとして検索した結果、表示されるページを対象にリンク切れを確認するという動作になります。
"-ns:0" 名前空間が0のもの、つまり標準名前空間(通常の記事)を対象にします。
"-max_external_links:5" 一度にチェックする外部リンクの数。大きな数に設定するとソケットエラーが発生することがあり、正しく判定ができなくなります。また多少なりともリクエスト発行を抑えられるかと思います。
"-day:0" 前回チェックしてから0日以上経過しているもの、ないしは初めてチェックされるもののみチェックします。
その他
weblinkchecker はオプション設定をしない限り、ウィキペディアの編集は一切行いません。ログに関してはローカルにテキストファイルの形で残します(《pywikibotのルートフォルダ》/deadlinks というフォルダに作成します)。また、初回動作ではコンピューター向けのdatファイルのみ出力し、テキストファイルは出力しません。2回目以降は人間にも読める形のログをテキストファイルで残します。ネットワークのトラブルなどが原因で、リンク切れではないのに誤ってリンク切れと判定されてしまうことを防止するため、このような動作になっているようです。
上記で私が示したコマンドラインは www.info.pmda.go.jp/go/ にリンクしている記事すべてを対象にリンク切れを確認しますが、特定の記事だけ(例えば、自分が関わった記事だけ)ということなら、チェックする記事を一覧化したテキストファイルを用いた方が便利だと思います。
任意の名前をつけたファイルに
ミコフェノール酸モフェチル
ミソプロストール
ミラベグロン
といった形で記事名を羅列していきます。コマンドラインは -weblink ではなく、-file を使用します。例えば、ファイル名が list.txt ならば、python pwb.py pmdachecker "-file:list.txt" "-ns:0" "-max_external_links:5" "-day:0" といった感じです。ファイルはUTF-8で保存してください。
最後になりますが、MW:Manual:Pywikibot/weblinkchecker.py にもマニュアルがありますのでご参考にどうぞ。

コメント欄

[編集]

上記に直接コメントされても構いませんが、こちらに記述した方がわかりやすいでしょうか。それと私も詳しいわけではないので、もし間違ったことを言ってたらごめんなさい。このテキストの利用については自己責任ってことでよろしくお願いします。--にょきにょき会話) 2016年6月26日 (日) 14:07 (UTC)

有難うございます。お手数をお掛けしてしまい申し訳ありません。自分へのメモも兼ねてご報告します。httplib2についいては管理者権限でコマンドプロンプトからpython -m pip install -U pippython -m pip install --upgrade pipを実行し無事修了したのですが、weblinkchecker.py -helpの結果は“Error: Python module httplib2 >= 0.6.0 is required.”のままでした。でも、igonorelist設定後、実動作(コマンドライン)でご紹介下さったコマンドラインをコピペして実行したら、エラー無く完了しました。チェックが50件に制限されているのは、サーバーの負荷に配慮しているのでしょうか。実行2回目に最後に-repeatオプションを付けるとテキストファイルが出来たのですが、1回目と2回目で検出される項目が違うので。面食らっています。繰り返してdeadlinkを潰していく内に、収斂してくるんでしょうか。それから記事一覧ですが、外部リンク検索/www.info.pmda.go.jp/go/でざらっと見てみましたら8割以上が自分が袖を触れた記事でしたので、全部纏めて点検対象にしたいと思います。兎にも角にも、有難うございました。--七比㐂乃貓会話) 2016年6月26日 (日) 23:17 (UTC)
もしかしたら私の書き方が悪くて誤解させてしまったかもしれません。「チェックが50件に制限されている」というのは、おそらく -max_external_links のデフォルト設定のことだと思いますが、上では「一度にチェックする」と書きましたが、「同時にチェックする」の意味です。つまりデフォルトでは同時接続数が50となります。なぜここを気にしたのかと言うと、「1回目と2回目で検出される項目が違う」とおっしゃられていたので、もしかして Socket Error が出ているのではと考えたからです(今回の場合、正常な動作ならほぼ404以外は検出されないはずです)。同時接続数が多いと、エラーが多発し正常にチェックができません。それゆえ私は安全・確実かなと思われる5という値に設定しています。ここまで書いておいて何ですが、私がコメントを読み間違えているだけかもしれません。ただ、もし私の記述のせいで誤解されているようなら、申し訳なく思いますし、お詫びいたします。--にょきにょき会話) 2016年6月27日 (月) 14:43 (UTC)
いえいえ、御返事を戴きまして有難うございます。同時接続数なんですね。自宅の環境は光回線のくせに貧弱なので、同時接続:5のまま行こうと思います。実行中に
WARNING: API warning (query): Too many values supplied for parameter 'pageids': the limit is 50
と出てきたので、ページ数の制限だと勘違いしてしまいました。実際表示されたページ数も約50件でしたのでそういう仕様だと思ってしまいました。
実は今日、2度目の実行をしたら、別の50件が出力されました。特別:外部リンク検索でザラッと見た処、五百数十件の内の半分以上が切れているように見えたので、先が長いなぁ、と思いながらやっています。いっぺんに全部出力するには、何かオプションを指定するのでしょうか?マニュアル頁を読んでもさっぱり判りません。--七比㐂乃貓会話) 2016年6月28日 (火) 00:58 (UTC)
あああ、私の読み間違えでした…。と、同時に weblinkchecker にバグがあることも分かりました。詳細はこちらにありますが、Mediawikiでは一度に取得するページ数に制限が課されており、Botフラグがない場合は50が制限値となっています。weblinkchecker はBotフラグの有無にかかわらず240ページを一度に取得しようとしますので、Botフラグなしだと七比㐂乃貓さんが書かれたエラーが出てしまい、正常な動作が行われないようです。修正方法は先に挙げた phabricator のものを適用する、もしくは
gen = pagegenerators.PreloadingGenerator(gen, step=pageNumber)
gen = pagegenerators.PreloadingGenerator(gen) に書き換えてください(これで50ページずつ読み込みます)。
私の環境だとエラーが出なかったため、このようなバグがあることを把握できておりませんでした。お手数ですがご修正よろしくお願いいたします(余談ですけど、weblinkchecker はログインを催促しないので、Botアカウントでログインしているのを前提としたこの仕様は良くないですね…)。--にょきにょき会話) 2016年6月28日 (火) 13:43 (UTC)
何と、バグだったのですね。色々起こりますねぇ、面白いです。取り敢えず、ご指摘の箇所を修正して、Warning 無しで動作する事を確認しました。未だ詳細には確認していませんが、50ページずつの取得を繰り返して全項目を取得している雰囲気です。有難う御座いました。--七比㐂乃貓会話) 2016年6月28日 (火) 22:41 (UTC)