[Python] Qiita APIを使って投稿一覧を取得する + 2018年の振り返り

# 背景

勉強中のPythonで何かを作りたかった。
あと、今年の振り返りという名のポエムを書きたかった。

# 動作環境
- Windows 10
- Python3.7.1(Anaconda)
- VSCode 1.29.1

# ソースコード

投稿一覧を取得するコードを書きました。

```python
import http.client
import json
import math

CONN = http.client.HTTPSConnection('qiita.com', 443)
USER_ID = 'riekure'
PER_PAGE = 100

class Api:
    # リクエスト結果をJSON形式で返す
    @staticmethod
    def request(http, url) :
        CONN.request(http, url)
        res = CONN.getresponse()
        data = res.read().decode('utf-8')
        return json.loads(data)

    # 投稿数とからページ番号を計算する
    @staticmethod
    def page_count(items_count) :
        return math.floor(items_count / PER_PAGE) + 1

# 投稿数を取得
items_count = Api.request('GET', '/api/v2/users/' + USER_ID)['items_count']
page = Api.page_count(items_count)

# 投稿記事を全て取得
for i in range(page) :
     article = Api.request('GET', '/api/v2/users/' + USER_ID + '/items?page=' + str(i+1) + '&per_page=' + str(PER_PAGE))
     print('| 記事タイトル | 投稿日時 | いいねカウント |')
     print('|------------|--------------|--------------|')
     for j in range(PER_PAGE) :
         try :
             print('| ' + article[j]['title'] + ' | ' + article[j]['updated_at'] + ' | ' + str(article[j]['likes_count']) + ' |')
         except IndexError :
             print('出力完了')
             break
```

これを実行してみると、@riekure で今まで投稿してきた記事タイトル、日時、いいね数を取得することができます。
USER_ID変数の値を変更すれば、別ユーザの投稿一覧も取得することができます。
一応、何件でも取得することができると思います。

| 記事タイトル | 投稿日時 | いいねカウント |
|------------|--------------|--------------|
| [Python] Qiita APIを使って投稿一覧を取得する + 2018年の振り返り | 2018-12-31T15:19:25+09:00 | 1 |
| 下位20%のダメなエンジニアにだけ解けないパズルを解いた | 2018-12-28T14:24:08+09:00 | 1 |
| [Unity]"Can't add script behavior XXXX.The script needs to derive from MonoBehaviour"の改善方法4つ | 2018-12-17T10:10:29+09:00 | 0 |
| 特定のファイルをrmコマンドなどで削除できないようにする方法(chattr、lsattrコマンド) | 2018-12-12T10:36:02+09:00 | 3 |
| ログインできないユーザでコマンドを実行する方法＋おまけ | 2018-12-04T18:17:23+09:00 | 0 |
| [Java]過去の自分が作成した機能をjava.io.FileからNIO.2で書き直し | 2018-12-28T18:26:41+09:00 | 2 |
| [Java 8]コーディングテストで使える標準入力をリストまたは配列に変換するまで | 2018-11-12T19:54:29+09:00 | 1 |
| [Java 8]コーディングテストで使えるアルファベット順、文字列長順のソート方法 | 2018-11-05T10:05:00+09:00 | 3 |
| [初心者]AWSを月数百円くらいの範囲で使っていると思ったら、2000円くらい請求された話 | 2018-11-05T16:08:17+09:00 | 1 |
| [Java] ファイル書き込みは何を使えばいいのか | 2018-10-24T01:18:25+09:00 | 0 |
| [MyBatis]大量データをマッピングするときはCursorを使おう | 2018-10-15T13:03:31+09:00 | 3 |
| Oracle SQL(11g)でMySQLのLIMIT OFFSET句を再現したい | 2018-10-09T22:23:58+09:00 | 2 |
| Amazon Linux 2でmysql-serverがインストールできないときの対処方法 | 2018-10-01T08:12:57+09:00 | 0 |
| 下位10%のダメなエンジニアにだけ解けないパズルを解いた結果、下位10%のダメなエンジニアだと判明した | 2018-09-26T00:11:50+09:00 | 3 |
| .bash_profileの設定を間違えて、どんなコマンドも"command not found"になってしまったときの解決方法 | 2018-09-18T13:40:00+09:00 | 3 |
| EclipseからIntelliJ IDEAに移行する人のためのショートカット比較(Windows) | 2018-09-10T11:12:18+09:00 | 3 |
| クソコード量産プロジェクトを撲滅するためのESLint導入物語 | 2018-09-18T13:38:25+09:00 | 24 |
| (Java7以降限定)オブジェクトはObjects.equalsで比較してほしい | 2018-08-29T01:37:42+09:00 | 5 |
| Oracle SQLでDB接続中のセッションを特定＆強制終了(KILL) | 2018-08-21T13:43:04+09:00 | 1 |
| AWS認定ソリューションアーキテクトアソシエイト(SAA)不合格体験記 | 2018-09-19T09:05:06+09:00 | 4 |
| 条件式が複数ある三項演算子に混乱した話 | 2018-08-01T11:49:02+09:00 | 2 |
| git revertの基本的な使い方 | 2018-11-09T22:23:23+09:00 | 1 |
| 特定のポート番号を使用しているプロセスの見つけ方 | 2018-07-11T11:19:12+09:00 | 0 |
| Javaでファイルをバイト配列に変換する方法 | 2018-07-02T16:12:57+09:00 | 1 |
| JavaプログラマがPythonを勉強してみた。(デコレータについて） | 2018-08-26T12:15:09+09:00 | 2 |
| Windows10のノートPC内蔵キーボードはJIS配列、Bluetooth接続のキーボードはUS配列にする設定方法 | 2018-06-18T14:32:03+09:00 | 2 |
| JavaプログラマがPythonを勉強してみた。(関数(メソッド)について） | 2018-06-14T19:24:21+09:00 | 4 |
| JavaプログラマがPythonを勉強してみた。(型について） | 2018-06-06T18:48:00+09:00 | 13 |
| JavaプログラマがPythonを勉強してみた。(for, if, while文) | 2018-05-29T09:07:57+09:00 | 8 |
| AWS認定ソリューションアーキテクトアソシエイトを合格するまで更新するのをやめないッ！ | 2018-08-17T09:13:01+09:00 | 14 |
| SimpleDateFormatとDateTimeFormatterの違いってなんだ？？ | 2018-05-14T11:26:04+09:00 | 3 |
| Java 8 LocalDateTimeの型変換のあれこれ(String, java.util.Date) | 2018-05-08T20:47:14+09:00 | 2 |
| MyBatisのSQLで不等号の比較演算子を使う | 2018-05-01T11:40:17+09:00 | 4 |
| Javaで英数記号・ひらがな・カタカナ・JIS第一／第二水準漢字以外をエラーにするチェック処理を実装してみた | 2018-05-06T22:14:45+09:00 | 4 |
| Aurora(MySQL)でCREATE VIEWしたらエラーが出た | 2018-04-10T09:28:36+09:00 | 2 |

# 今年の振り返り（ポエム）

5月からQiitaに週1投稿してきました。
しかし、激務だったり、他作業に注力していたり、投稿できない週もありました。
実は4月からやっていましたが、限定公開していたり、情報が間違いすぎて記事を消したりしました。

来年は、ちゃんと週1投稿したいです。
できれば、毎週月曜日に投稿できるようにしたいと思います。
（土日を中心に、月曜日に投稿するという形でいきたい！）

仕事ではずっとJavaをやっていました。
プライベートはJavaとPython、AWSをやっていました。

今年中のSAA取得を目指していましたが、2回不合格で未達成でした。
みんな1ヶ月で取得できたり、インフラ未経験から取得できたり、すごい人ばかりで嫌になりますね…
仕事が忙しかったり、インフラの基礎知識がなかったり、そもそも仕事が忙しかったり、言い訳はいくらでもありますが、2019年3月までに取りたいです。

今年中に転職したい！と思っていましたが、見事に失敗しました。
Webエンジニアで、BtoCで今の給料と同じくらいで開発環境が良いところを探していました。

10社くらい受けて、8社はスキル不足という理由で、書類選考や面接で落とされました。
1社受かりましたが、みなし残業60時間ついているのに、今の残業なし基本給より低かったので、辞退してしまいました。
転職するにあたって、自分のスキル不足やら努力不足を痛感しました。
就職してから自分なりに努力してきたつもりでしたが、Web企業から言わせると、ダメダメだったみたいです。
今まで、他の会社でもエンジニアとして勉強してきたつもりでしたが、足りなかったです。

できるWebエンジニアは、2週間でWebアプリ作って公開したり、半日でSPA作ったりしています。
それに比べると、確かに自分はスキルも経験もまだまだだということを痛感しました。

あとWeb業界のスピードと技術力についていけない…と毎日Qiitaを読んでいて思いました。
なんでこんなにインフラもフロントエンドもサーバサイドもできるエンジニアがこんなにたくさんいるんだ…って感じています。
サーバサイド1つでも大変なのに、フロントエンドとかのReact、Angular、Vueとか、クラウドさくっと理解できたりWebエンジニアの人は本当にすごいです。

というわけで、Webエンジニアへの転職は一旦諦めて、現職SIerでダラダラ過ごすことにします。

趣味で、学生時代にやっていたUnity + VRを再開しました。
自分にITに進むきっかけをくれた世界です。
金になるかとか、職業になるとかは一旦おいておき、やりたいことを勉強していきたいと思います。

なので、今後はUnityとC#の投稿を増やしていく予定です。
あとは資格取得を目指すAWS、仕事でやっているJavaやOracle、SQLも投稿していくと思います。

# 終わりに

Qiitaの皆さんには、日々色々な記事で非常に勉強させていただいています。
来年もよろしくお願いします。

# 参考文献

[Qiita API v2 documentation - Qiita:Developer](https://qiita.com/api/v2/docs)
[[Python] コーディング規約(PEP8)を学んで、Pythonらしいコードを書く - YoheiM .NET](https://www.yoheim.net/blog.php?q=20160612)