ブログランキングで最新記事を取得できるようにした時の話(2)
2017/02/11 23:56
  • 前回の記事、「ブログランキングで最新記事を取得できるようにした時の話(1)」の続きです。

    前回はDjangoのfeeds.pyによるRSSフィードの配信まで書きました。
    今回はブログランキングで起きた問題と、その解決法について書きたいと思います。

    最新の記事が反映されない…!

    記事を更新し、管理画面からpingを送信したにも関わらず、
    ブログランキング画面で最新記事が取得できないという由々しき事態に直面。

    いつまで待っても、以下のような画面のままです。

    最新記事が反映されない

    RSSフィードの形式がおかしいのかと思い以下のツールで確認してみるも、特に問題なさそう。

    W3C Feed Validation Service
    RSSの中身は問題なし

    途方に暮れたので「人気ブログランキング」のサポートに問い合わせてみました。

    人気ブログランキングからの回答

    問い合わせの翌日には返答をもらえました。おもったより早かった!
    事前の質問内容を抜粋すると、
    ・ping送信しているにもかかわらず、最新記事が反映されない
    ・そちらでRSSが正しく処理されているか確認してほしい
    ・もしわかればでOKだが、RSSの形式に不備があるなら教えて欲しい

    以下回答:

    人気ブログランキング サポートです。
    お問い合わせ頂き、誠にありがとうございます。
    
    ご連絡いただいた内容について確認したところ、RSSに日付がないため、
    記事取得ができていないようでした。こちらを修正いただくことで正常に
    記事取得ができる可能性があります。
    
    ※RSSの設定方法はご利用のブログサービス提供会社にお問い合わせ
    いただきますよう、お願い申し上げます。
    
    今後とも弊社サービスをよろしくお願いいたします。
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    人気ブログランキング
    http://blog.with2.net/
    

    …!

    なんとまぁ初歩的な。┐(´д`)┌ヤレヤレ
    どうやら日付がないので正しく処理できていなかったようです。
    そしてすぐに調べていただき、的確に間違いを指摘してくれて大変助かりました!
    人気ブログランキングさんありがとうございます。m(_ _)mm(_ _)m

    RSSフィードの修正

    というわけで、即座にRSSを修正します。
    前回の記事、「ブログランキングで最新記事を取得できるようにした時の話(1)」では、
    以下のようにfeeds.pyを設定していました。

    # 記事一覧のRSSフィード
    class ArticlesFeed(Feed):
        title = '4to.pics Articles'
        description_template = None
    
        # 記事リスト。直近5件だけ抽出
        def items(self):
            return Article.objects.filter(is_publish=1).order_by('-updated_at')[:5]
    
        # 記事概要。テーブルの設計が悪かったので取り急ぎ「ーーーー」をセパレータとして使いました。
        # 「続きを読む」的なアレデス。記事テーブルに`description` カラムを用意してあげたほうがシンプルです。
        def item_description(self, item):
            return item.content.split('ーーーー')[0]
    
        # setting.pyに定義したサイトのBASE_URL(http://4to.pics/)を返す
        def link(self):
            return settings.BASE_URL
    

    これだけでは日付が送信されないことがわかったので、以下を追記します。
        # published date(公開日)
        def item_pubdate(self, item):
            return item.created_at
    
        # updated date (更新日)
        def item_updateddate(self, item):
            return item.updated_at
    

    以上でRSSフィードに公開日と更新日が追加されるようになりました。

    もう一度pingを送信し、反映されることを確認する

    ブログランキングの方でもう一度pingを送信します。
    反映されるまでに最大1時間ほどかかるので、ここは気長に待ちます。

    …数十分後…

    最新記事が表示された!

    見事に取得されるようになりました!
    みなさんも記事反映されない現象に遭遇したら、日付を正しく送信できるか確認しましょう…!

    (RSSを自前でフィードする人なんて少数派だとは思いますが)

    人気ブログランキングへ ブログランキング・にほんブログ村へ
    ↑応援よろしくお願いします!m(_ _)m

  • <2017/02/11 22:58>
  • Python
  • PythonDjangoRSSfeedAtomフィードブログランキングblogranking日付pubdateupdateddate
  • 新しい記事へ
    ブログランキングで最新記事を取得できるようにした時の話(1)

    古い記事へ
    [写真日記]Veniceの想い出(1)

profile picture

自己紹介的な何か

@wkmettyでついったーやってます。時々。 6年間勤めたゲーム会社を2018年2月に退職しフリーランスのプログラマに。 WordPress Core, WP-CLI コントリビューター。 お仕事募集中です。