1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

はてなブックマークのリンク生存確認スクリプト

Last updated at Posted at 2020-07-23

目的

自分のはてなブックマークに貯めこんだリンクについて、デッドリンクがあれば知りたいなーと思い、Python で書いてみました。

特定のユーザー (想定は自分) のはてなブックマークを一個一個アクセスし、レスポンスコード 200 が得られない場合はタイトルを出力しています。

はてなブックマークで公開されている REST API 系ではユーザーのブックマーク一覧を取得できないようでしたので、RSS から取得しています。

コード

import feedparser
import requests

currentPage = 1
USERNAME = "<はてなブックマークのユーザー名>"

URL = "https://b.hatena.ne.jp/{user}/bookmark.rss?page={page}"
geturl = URL.format(user=USERNAME,page=currentPage)

rssResponse = feedparser.parse(geturl)

# とりあえず中身があるかどうか確認
if len(rssResponse.entries) == 0:
    exit("何かが間違っていると思います")

# メインのループ処理
while True:
    for entry in rssResponse.entries:
        try:
            currentUrlStatusCode = requests.get(entry.link).status_code
        except requests.exceptions.RequestException as e:
            currentUrlStatusCode = e

        if str(currentUrlStatusCode) != "200":
            print(entry.title, ": NG (", currentUrlStatusCode, ")")
    
    currentPage = currentPage + 1
    geturl = URL.format(user=USERNAME,page=currentPage)
    rssResponse = feedparser.parse(geturl)

    # 簡易的な進捗表示。不要な場合はコメントアウト
    print(currentPage)

    # 要素数が 0 なら終わり
    if len(rssResponse.entries) == 0:
        break

print("終わり。最後のページは ", currentPage, " です。")
exit(0)

出力イメージ

...
<中略>
IBM Redbooks | Linux : NG ( 404 )
Exchange 2013 の CPU 使用率の上昇のトラブルシューティング | Microsoft Docs : NG ( 404 )
Not found | Nomura Research Institute (NRI) : NG ( 404 )
33
OSS iPedia 記事 : NG ( HTTPConnectionPool(host='ossipedia.ipa.go.jp', port=80): Max retries exceeded with url: /doc/201/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000001EBC957F460>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed')) )
OSS iPedia 記事 : NG ( HTTPConnectionPool(host='ossipedia.ipa.go.jp', port=80): Max retries exceeded with url: /doc/457/ (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000001EBC9537100>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed')) )
PowerShell DSC for Linux is now available! - Windows PowerShell Blog - Site Home - MSDN Blogs : NG ( 403 )
34
終わり。最後のページは  34  です。

動作確認環境

  • Windows 10
  • Python 3.8.3 64-bit

備考

  • リンクによっては「ドメインがもう無い」など様々な理由でコネクションエラーになったりするので、エラー処理をかませています。
  • RSSフィードを操作する際は、feedparser を利用しています。XML を操作しなくて良いので、すごく楽でした。
  • はてなブックマークの RSS の仕様やサンプルページはこちらにあります。
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?