自分が書いたZennの記事一覧をPython2で取得する

7 min read読了の目安(約7100字

Zennの記事一覧を取得したかったのでPython(python2)でコードを書いてみました。Zennは非公式ですがjsonでデータを取得できるAPIがあります、実際のデータはこのような感じでした(2021/4/4の時点)。

{
    "article_type": "tech",
    "body_letters_count": 849,
    "body_updated_at": "2021-04-02T19:32:32.584+09:00",
    "comments_count": 0,
    "created_at": "2021-04-02T19:28:56.319+09:00",
    "emoji": "\ud83d\udd16",
    "id": 29562,
    "is_suspending_private": false,
    "liked_count": 3,
    "published": true,
    "published_at": "2021-04-02T19:28:56.219+09:00",
    "reading_time": 0,
    "slug": "swiftui-zucks",
    "source_repo_updated_at": "2021-04-02T19:32:32.584+09:00",
    "title": "SwiftUI\u3067Zucks\u3092\u5229\u7528\u3057\u3066\u30d0\u30ca\u30fc\u5e83\u544a\u3092\u8868\u793a\u3059\u308b",
    "topics": [
        {
            "display_name": "zucks",
            "id": 6435,
            "image_url": null,
            "name": "zucks",
            "taggings_count": 1
        },
        {
            "display_name": "SwiftUI",
            "id": 393,
            "image_url": "https://storage.googleapis.com/zenn-user-upload/topics/9b3c8449b6.jpeg",
            "name": "swiftui",
            "taggings_count": 97
        },
        {
            "display_name": "Swift",
            "id": 115,
            "image_url": "https://storage.googleapis.com/zenn-topics/swift.png",
            "name": "swift",
            "taggings_count": 348
        },
        {
            "display_name": "iOS",
            "id": 62,
            "image_url": "https://storage.googleapis.com/zenn-topics/ios.png",
            "name": "ios",
            "taggings_count": 428
        }
    ],
    "updated_at": "2021-04-04T07:15:15.600+09:00",
    "user": {
        "avatar_small_url": "https://storage.googleapis.com/zenn-user-upload/avatar/icon_d8a9473a36.jpeg",
        "id": 60,
        "name": "yorifuji",
        "username": "yorifuji"
    }
}

記事一覧を取得するコードはこちら。

https://github.com/yorifuji/get-zenn-articles
main.py

import json
import urllib

username='yorifuji'

params = urllib.urlencode({'username':username})
articles_json = json.loads(urllib.urlopen('https://api.zenn.dev/articles?%s' % params).read())["articles"]

class Article:
  def __init__(self, json):
    self.id         = json["id"]
    self.title      = json["title"].encode('utf-8')
    self.created_at = json["created_at"].encode('utf-8')
    self.published  = json["published"]
    self.url        = 'https://zenn.dev/%s/articles/%s' % (username, json["slug"].encode('utf-8'))

articles = sorted(filter(lambda article: article.published, [Article(json) for json in articles_json]), key=lambda article: article.created_at)

print "id,title,url,created_at"
for article in articles:
  print "%d,%s,%s,%s" % (article.id, article.title, article.url, article.created_at)

出力。

2344,iOS14に追加されたAirPodsProのモーションを取得するAPIを調べる,https://zenn.dev/yorifuji/articles/19a4aa065f41309d3b95,2020-09-22T19:55:17.843+09:00
4607,AirPodsProのセンサー情報を取得する,https://zenn.dev/yorifuji/articles/a508862e9fea55b2ca7e,2020-09-28T23:34:59.287+09:00
5559,AirPods Proのモーションデータをcsvファイルに記録する,https://zenn.dev/yorifuji/articles/1632a1d8ff6f3b98c134,2020-10-03T10:15:05.526+09:00
5601,AirPods Proのモーションセンサーを使って体の動きを機械学習で判定する,https://zenn.dev/yorifuji/articles/bc315373b207667206e4,2020-10-03T15:00:02.042+09:00
6179,指差し確認をApple Watchと機械学習を使って検出する,https://zenn.dev/yorifuji/articles/af1b54285c1c4f7a3249,2020-10-06T22:23:10.856+09:00
6818,WCSessionを使ってファイル転送するときの注意点,https://zenn.dev/yorifuji/articles/7a4d6766f50cd02319b7,2020-10-10T19:24:21.552+09:00
9684,iOSで利用できる機械学習系のText Recognitionフレームワークの調査,https://zenn.dev/yorifuji/articles/ios-japanese-text-recognition-framework,2020-10-30T17:31:41.299+09:00
9855,2020年10月の振り返り,https://zenn.dev/yorifuji/articles/self-release-note-202010,2020-11-01T13:24:40.356+09:00
10238,Microsoftの機械学習のトレーニングツール「Lobe」を使って作成したiOSの画像分類モデルについて,https://zenn.dev/yorifuji/articles/lobe-ios-coreml-model,2020-11-04T01:19:05.710+09:00
11996,Firebase Machine Learningの文字認識機能を使ってみる,https://zenn.dev/yorifuji/articles/ios-firebase-ml-text-recognition-app,2020-11-22T20:09:31.348+09:00
12052,「UIKit丸出し」で十分な人向けのSwiftUI,https://zenn.dev/yorifuji/articles/ios-swiftui-basis,2020-11-23T13:08:58.669+09:00
12973,2020年11月の振り返り,https://zenn.dev/yorifuji/articles/self-release-note-202011,2020-12-01T19:12:30.671+09:00
17582,2020年12月の振り返り,https://zenn.dev/yorifuji/articles/self-release-note-202012,2021-01-05T01:37:41.294+09:00
18508,SwiftUIでAVFoundationを使ってフレームバッファを取得する,https://zenn.dev/yorifuji/articles/swiftui-avfoundation,2021-01-12T01:38:44.164+09:00
20943,SwiftUIからFirebaseUIを使う,https://zenn.dev/yorifuji/articles/swiftui-firebaseui,2021-01-30T20:32:41.769+09:00
21344,SwiftUIのNavigationViewで画面全体に背景色を適用する,https://zenn.dev/yorifuji/articles/swiftui-navigationview-bgcolor,2021-02-02T00:20:26.156+09:00
21532,2021年1月の振り返り,https://zenn.dev/yorifuji/articles/self-release-note-202101,2021-02-03T11:44:04.853+09:00
25731,Firebase Storageにバケットを追加する,https://zenn.dev/yorifuji/articles/firebase-storage-multi-buckets,2021-03-04T22:27:34.199+09:00
26079,SwiftUIでUIViewを表示する,https://zenn.dev/yorifuji/articles/swiftui-uiviewrepresentable,2021-03-07T15:54:01.658+09:00
26091,SwiftUIでSkyWayの映像を表示する(SwiftUIでSKWVideoを使う方法),https://zenn.dev/yorifuji/articles/swiftui-skyway-skwvideo,2021-03-07T17:54:10.542+09:00
27193,SwiftUIでAdMobを使ってバナー広告を表示する,https://zenn.dev/yorifuji/articles/swiftui-admob,2021-03-16T01:20:53.914+09:00
27423,SwiftUIでアルファベットと数字だけ入力できるTextField,https://zenn.dev/yorifuji/articles/swiftui-textfield-filter,2021-03-17T22:59:10.609+09:00
27577,SwiftUIのPreviewのちょっと便利な使い方,https://zenn.dev/yorifuji/articles/swiftui-preview-tips,2021-03-18T23:55:06.908+09:00
27699,SwiftUIでUIImagePickerControllerを使う,https://zenn.dev/yorifuji/articles/swiftui-imagepicker,2021-03-19T18:58:41.509+09:00
27843,iOSでAdMobが表示されなくなったので確認したこと(進行形),https://zenn.dev/yorifuji/articles/swiftui-admob-error,2021-03-20T19:37:52.133+09:00
28007,MediaStreamから音声ストリームを取り出して左右に振り分けたストリームを作成する,https://zenn.dev/yorifuji/articles/mediastream-channel,2021-03-21T19:59:47.436+09:00
28184,SwiftUIでダウンロードした画像を表示する,https://zenn.dev/yorifuji/articles/swiftui-download-image-async,2021-03-22T23:57:29.606+09:00
28309,iOS14のAppTrackingTransparencyに対応するためにやったこと,https://zenn.dev/yorifuji/articles/ios-app-tracking-transparency,2021-03-24T01:37:42.606+09:00
28502,Keystoreとバイナリのフィンガープリントを確認する(Android),https://zenn.dev/yorifuji/articles/android-keystore-fingerprint,2021-03-25T20:03:36.227+09:00
28713,2021年2月の振り返り,https://zenn.dev/yorifuji/articles/self-release-note-202102,2021-03-27T16:46:41.795+09:00
28778,SwiftUIのNavigationViewでiPhoneとiPadの動作を合わせる,https://zenn.dev/yorifuji/articles/swiftui-navigationviewstyle-stack,2021-03-28T00:40:55.192+09:00
29465,SwiftUIのiPadアプリでAdMobを使うときに必要な設定,https://zenn.dev/yorifuji/articles/swiftui-admob-ipad,2021-04-01T20:45:13.198+09:00
29562,SwiftUIでZucksを利用してバナー広告を表示する,https://zenn.dev/yorifuji/articles/swiftui-zucks,2021-04-02T19:28:56.319+09:00
29624,Zenn CLIで執筆するためのMakefileの手始め,https://zenn.dev/yorifuji/articles/zenn-makefile,2021-04-03T12:40:16.717+09:00

参考

ZennのAPIはこちらの記事を参考にしました、感謝。

https://zenn.dev/captain_blue/articles/develope-monthyl-blog-report-slack-app