🖥

#Qiita #API で任意のユーザーの記事一覧を得る簡単な #python スクリプトの例 (改善版) ( + #jq #JSON )

2019/04/15に公開

公開情報なので TOKEN やログインなどは不要

script

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# https://qiita.com/api/v2/docs#item

import requests, json, os, sys

USER_ID = os.environ.get('QIITA_ITEMS_USER_NAME')
ROUND = int(os.environ.get('QIITA_ITEMS_ROUND')) if os.environ.get('QIITA_ITEMS_ROUND') else 1
PER_PAGE = os.environ.get('QIITA_ITEMS_PER_PAGE') if os.environ.get('QIITA_ITEMS_PER_PAGE') else 100

api_url = 'https://qiita.com/api/v2/users/' + USER_ID + '/items'

results = []

for num in range(ROUND):
  page = str(num+1)

  params = {
    "page": page,
    "per_page" : str(PER_PAGE)
  }

  response = requests.get(api_url, params=params)

  results += response.json()

print(json.dumps(results))


exe

QIITA_ITEMS_USER_NAME=YumaInaura QIITA_ITEMS_ROUND=3 ./list.py | jq . > log/list.json

use case of jq

jq コマンドでタイトルだけ抜き出す例

cat log/list.json| jq '.[].title' | p
"#python で値を持った既存の辞書に、デフォルト値つきの辞書をマージする例 ( もう if 'key' in dict なんて書きたくないんですよ‥ )"
"#python の defaultdict を利用して KeyError を防ぎたい"
"Example of using defaultdict to prevent KeyError in # python's nested dictionary (#ruby comparison)"
"# Service ideas for \"My English Learning\" on Twitter. Google translates Japanese into English and pursues!"
"I want to do something like a beauty watch by switching profile images every minute on #Twitter (Try it)"
"#python の ネストされた辞書で KeyError を起こさないように defaultdict を利用する例 ( #ruby 比較 )"
"#Twitter で「俺の英語学習」のサービスアイディア。日本語を英語にGoogle翻訳して追撃!"
"#Twitter でプロフィール画像を1分毎に切り替えて美女時計みたいなことがやりたい  (お試し)"
"Why did #python open up dictionary access to match objects? (`TypeError: '_sre.SRE_Match' object is not subscriptable`)"
"とあるRailsエンジニアが再就職活動を共有したがっているようだ 2019-04-14 on Twitter"
"なぜ #python は match オブジェクトへの辞書アクセスなんかを開放したりしたのだい? ( `TypeError: '_sre.SRE_Match' object is not subscriptable` )"
"An example of writing multiple standard output of echo and cat together in one file with #shell"
"Example of randomly generating tomorrow's hour and minute with datetime of #python"
"A simple example of creating a datetime object with a specific date / hour / minute / second specification in #python and parsing it into a string"
"An example of a simple script that combines multiple #JSON arrays flat with #python"
"A simple Dockerfile example that creates an image or container with various gems in #ruby with #docker"
"I want to switch profile images in night mode on Twitter at night. (#Python script example of updating profile image with #Twitter # API)"
"Twitterで夜はナイトモード的にプロフィール画像を切り替えたい。 ( #Twitter #API でプロフィール画像を更新する #python  スクリプトの例 )"
"とあるRailsエンジニアが再就職活動を共有したがっているようだ 2019-04-13 on Twitter"
"#python の datetime で明日の 時・分をランダムに生成する例"
"#python で 特定の年月日・時分秒・マイクロ秒指定で datetime オブジェクトを作成し、それを文字列にパースする簡単な例"
"#docker で #ruby に色々と gem を入れたイメージやコンテナを作成するごく簡単な Dockerfile の例"
"#python で 複数の #JSON 配列をフラットに結合する簡単なスクリプトの例 "
"#shell で複数の echo や cat の標準出力をまとめて一個のファイルに書き込む例"
"とあるRailsエンジニアが再就職活動を共有したがっているようだ 2019-04-12 on Twitter"
"A Rails engineer Toma Inaura Summary of recent learning and re-employment activities (early April 2018)"
"とあるRailsエンジニア 稲浦悠馬 最近の学習や再就職活動のまとめ (2018年4月前半) #Github や Google 翻訳 #API や #python や #JSON #jq などを触っていた"
"Example of deleting specific value from array of # python (I want to subtract array like # ruby)"
"#Github # Update API using API or delete only a specific label # python script example"
"#Github #API を利用して Issue を更新したり 特定のラベルだけ削除したりする #python スクリプトの例"
"#python の配列から特定の値を削除する例 ( #ruby みたいに配列の引き算がしたい )"
"Do some plucky things like #Ruby on #Rails against the #python dictionary"
"#python の 辞書 に対して #Ruby on #Rails の pluck 的なことをやる"
"#Mac OS A shortcut to delete a line of text at the current cursor position regardless of application (Control + A-> K)"
"( やばい -> dangerous ) #Google 翻訳 #API を利用して、標準入力に #JSON を与えると 翻訳結果を同じく JSON で標準出力する #python スクリプトの例"
"#JSON を標準入力として受け取り #Github #API を叩いて 複数の Issue  を作成する #python スクリプトの例"
"#python でサブプロセスを起動し #shell に引数・環境変数・標準入力を与え標準出力する例"
"#Mac で アプリケーションを問わずに現在のカーソル位置にある1行のテキストを削除するショートカット ( Control + A -> K )"
"#jq コマンドで #JSON の ネストされた配列の中のオブジェクトの中の配列からちょっと複雑な検索をする  ( select filter )"
"とあるRailsエンジニアが再就職活動を共有したがっているようだ 2019-04-11 on Twitter"
"#jq コマンドで配列を解除してまた囲む例"
"#python で #ruby の Hash#merge 的なことをやる ( 複数のディクショナリをマージする )"
"#GCP ( Google Cloud Platform ) の Google翻訳API で #MarkDown を翻訳するとスタイルが崩れてしまうので #ruby gem で一旦 #HTML  変換してから Markdown に逆変換する #shell コマンドの例"
"#ruby や #python で #markdown を #HTML に #shell のコマンドで変換できるモジュール四種類の簡単な結果比較"
"とあるRailsエンジニアが再就職活動を共有したがっているようだ 2019-04-10 on Twitter"
"#shell で #cd コマンドを引数なしで実行したら ホームディレクトリに一発で移動できて驚愕した件 ( #linux #mac )"
"プログラマに必要なのは危機感?好奇心?"
"#Twitter で ツイートIDを指定して URL を得る方法 ( リダイレクトを利用 )"
"#jq コマンドで #JSON 配列の個数を調べる例"
"#jq コマンドで #JSON 配列の shift & push 的なことをやる ( 配列の最初の要素を最後に入れ替える例 )"
"#python の正規表現で名前付きキャプチャグループを使う例 ( ?P<name> )"
"とあるRailsエンジニアは再就職活動にWantedlyを活用し始めているようだ 2019-04-09 on Twitter"
"#jq コマンドと #shell の組み合わせで、 JSON 配列が空かどうかを条件判定する例"
"#python スクリプトで #Twitter #API を叩いて複数のツイートを作成する例。標準入力に #JSON  を与える場合。"
"#Twitter Timeline #API で得られる created_at の時刻を元に unixtimestamp 基準で絞り込む #python スクリプトの例"
"#python で  英語月表記・タイムゾーン尽きの日付文字列を parse して datetime オブジェクトに変換し、さらに unixtimestamp に変換する例 ( UTC VS JST )"
"#GCP の Google 翻訳 #API を叩く #python スクリプト例。 #JSON を標準入力に与えると 翻訳結果のテキストを付与させて同じく JSON を標準出力する。"
"#jq コマンドむずい。オブジェクトの配列から、任意のキーを指定してフィルタし、新しいオブジェクトの配列を組み立て直そうとして失敗した例。"
"#python の __main__ 関数とは何なのか (いや関数じゃないよ) (初心者向け)"
"#jq コマンドを利用して エンコード済みのUTF-16 の文字列をデコードする例 (日本語)"
"#jq コマンドで文字列中のダブルクォートのエスケープを解除する例"
"とあるRailsエンジニアは就職活動体験をシェアしたがっている 2019-04-08 on Twitter"
"#perl で標準入力でテキストを受け取り指定の文字数で切り取るコマンド例 (正規表現利用)"
"#jq コマンドで出力されるダブルクォートを #perl  で削除する例"
"#python で datetime を microsecond までの timestamp に変換する例"
"とあるRailsエンジニアの転職活動の共有 2019-04-07 on Twitter"
"Wantedly探訪  株式会社ポテパン ( Twitter @potepan0901 ) #エンジニア #就職 #転職"
"#python で #ruby の instance#methods みたいな感じで全てのメソッドを表示するらしき例"
"#python からどんな #Twitter #API でも叩けるようにしておきたい、ごく簡単な汎用インターフェイス的スクリプトの例"
"とあるRailsエンジニアをお求めの方はこちらまで 2019-04-06 on Twitter"
"#python の 正規表現で何故か match が起こらない ? 複数行どころか先頭文字列にしかマッチしないから気をつけて!"
"#python の IPython で #ruby の binding.pry 的なデバッグがしたいけど 標準入力が奪われてうまく動かなかった件の共有"
"#Twitter #API の使う Bearer のアクセストークンを curl で得る例 (公式ドキュメントのまま)"
"#Centos 6 .10 + #docker で yum install がエラーで落ち curl さえ clould not resolve host とかわけの分からないことを言い出したが service docker restart で直った件"
"とあるRailsエンジニアをお求めの方はこちらまで 2019-04-05 on Twitter"
"Wantedly は超モダンな就活サービスの未来かもしれないぜ。とあるエンジニアの仕事探し 2019-04-04"
"#docker + #MySQL 5.7 で、コンテナを終了・再起動してもデータが消えないように volume mount しながら port 指定でDBサーバーを作る  docker-compose の例"
"#python でカンマ区切りの文字列を split して tuple を作る例"
"#python で複数の候補から startswidh endwitds を判定をする例"
"#python スクリプトにコマンドオプションを引数で渡す例"
"#python では標準ライブラリと同名のファイルは作ってはいけない ( わけではないかもしれないが、謎の import エラーが出る場合の対処 )"
"#GCP ( Google Cloud Platform ) を Centos に build する #docker image ( Dockerfile ) の例 "
"#docker で コンテナIDを指定して毎回 docker kill するのが面倒なので peco を使ってインタラクティブに削除できるようにする"
"#docker ps で コンテナIDだけ表示する #shell のコマンド例"
"#shell の標準出力から最初の1行だけ削除する例"
"#docker コンテナをバックグラウンド ( detach ) モードで起動させて、すぐに終了しない方法。 (初心者向け)"
"#Zapier | #Twitter でハッシュタグ付きの自分のツイートを #Slack チャンネルに投稿する例"
"とあるエンジニアの問題意識 2019-04-03"
"#vue.js の component が分かりにくいので手で動かして理解する ( 公式チュートリアルより ) ( Codepen )"
"未知の言語のコードリーディングのコツは、記号を読まずに自然言語に読むことかもしれない。"
"v-bind を使って、カーソルをテキストに合わせると、現在時刻を表示する例  #Vue.js のチュートリアルを Codepen でやる (初心者向け)"
"#vue.js のチュートリアルを Codepen でやる ( Hello World ) ( 初心者向け )"
"#vue.js で if else の条件分岐をする基本"
"#python で日付を JST=日本時刻=現地時刻で与えると日の始まりの unixtimstamp を出力する例"
"とあるエンジニアの再就職日記 2019-04-01 by 稲浦悠馬 いなうらゆうま"
"#shell で上位ディレクトリに cd で移動するのが面倒過ぎるのでエイリアスを作っておくだけの人生だった"
"#jq コマンドでリストを逆順に反転させる ( reverse )"
"#Twitter #API で1個のツイートIDを指定すると、ツリーの最上段までたどって全ツイートを取得する #python スクリプトの例 ( + #jq )"
"転職ドラフト第17回の最高年収提示額は「1100万円」だったようだ。 #就職 #転職 #エンジニア"
"(改善版) ( timeline API を利用) #Twitter #API で1個のツイートIDを指定すると、ツリーの最上段までたどって全ツイートを取得する #python スクリプトの例"
"#python でJST=日本時間=現地時刻を現在時刻を文字列で得る例"
"#python で unixtimestamp を日付形式の文字列に変換する例"
"#python で JST(日本時間)などの現地時刻で今日の始まりの unixtimstamp を得る例"
"#Slack #API を叩いて #jq コマンドで チャンネル名からチャンネルIDを取得する例"
"#Twitter が気になってプログラミングに集中できない人のための #GoogleChrome 拡張"
"東京リモートワークの夢を見る大阪求職者 by 業務経験約4年 Ruby on Rails エンジニア #転職 #ノベル 2019-03-30"
"エンジニア勉強会への参加が死ぬほど苦手な人のためのエンジニア勉強会の参加方法とは。 #エンジニア #学習 #勉強会"
"個人開発の #git で毎回コミットメッセージを考えるのが面倒臭すぎるので対策する"
"#python で ハッシュの配列から、特定の値を持ったものだけを絞り込む例"
"#Mac の MissionControl って Command + Tab でアプリケーションを切り替えても 何も起こらないことがあって使いにくいよね?"
"#vim を開いて一瞬で終了する何の意味もない例の提示"
"#Twitter #API を叩いて 10秒で消えるツイートを作成する例 ( #python #shell #jq )"
"#python で標準入力を全行読む例"
"#python で #Github #API  を叩いて1個の Issue 情報を取得するスクリプト例"
"#shell script で標準入力を全て読む"
"Qiitaで就職もできる。"
"プログラミングの原始衝動を思い出す旅の途中で by 業務経験約4年 Ruby on Rails エンジニア #転職 #ノベル 2019-03-29"
"スクラム開発 の勉強会で教わった「マルチタスクゲーム」とは? by スクラム道関西 #スクラム"
"#python スクリプトに shebang を書いてファイル直接指定で実行できるようにする"
"#jq コマンドで結果が空配列の場合に何も出力しない例"
"#jq コマンドでオブジェクトの配列から key の value で検索絞り込みする例"
"#jq コマンドは #JSON 的には不正な、フラットなオブジェクトの連続も解釈してくれるっぽい"
"#jq コマンドで要素全体を配列で囲う、もしくは逆に解除する例"
"なぜエラーメッセージでGoogle検索しないプログラマがいるのの私見であり、メモの断片である。"
"#jq コマンドで特定のキーを持つオブジェクトだけを絞り込み検索する例"
"#python で標準入力を #json で受け取る例"
"#python や #ruby コマンドの標準入力がコード評価で直接実行されることに気付いて驚いた件"
"僕が思うポートフォリオ作成のコツは、自分自身に最大素直になることだ。 #エンジニア #就職 #ノベル"
"エンジニア就職面接の想定問答集を自分で作って答えてみよう。 #就職 #転職 #ポエム"
"最終出社日を迎え、1ヶ月の有給消化期間に、プログラミングの原始衝動を思い出したいエンジニア。"
"題名のない退職エントリ by 大阪Ruby開発エンジニア #ノベル #ポエム 2019-03-25"
"僕がQiitaで転職ポエムを書き綴っていると、TwitterのDM経由で"
"人類に希望を与えない35歳エンジニアの再就職活動ポエムとは 2019-03-24"
"#jq コマンドで特定の文字列を含むオブジェクトを検索する例"
"#API を叩くには #python と #shell と #jq コマンドを組み合わせて、標準入出力でパイプするのが良さげじゃない?"
"#python で #Twitter API を叩いてツイートを削除するスクリプト例 (複数ツイート対応)"
"大阪Web開発 Rubyエンジニア 35歳 転職活動ポエムはまだ続く 2019-03-23"
"コンビニバイトとエンジニアの時給差はどこまで開くべきなのか。#超ポエム"
"大阪地下街のドトールで考える、プログラミングスクール講師としての転職の話。 #ポエム #ノベル #エンジニア #就職 #転職"
"大阪Web開発 Rubyエンジニア 35歳 転職活動はじまる 2019-03-22"
"エンジニアの就職面接で、あなたが自分の夢を語れないとしても。"
"とあるエンジニアの再就職活動 2019-03-21"
"眠りすぎる症候群、ナルコレプシー・エンジニアに俺はならない。"
"とあるエンジニアの再就職 〜退職が決まった〜"
"とあるエンジニアの問題意識 2019-03-20"
"とあるエンジニアの問題意識 2019-03-19"
"駆け出しのエンジニアの頃、僕は人より10倍も速いスピードで、プログラミングしようと思っていた"
"とあるエンジニアの問題意識 2019-03-18"
"とあるエンジニアの問題意識 2019-03-16"
"とあるエンジニアの問題意識 2019-03-15"
"#Slack で画像をアップロードすると #Twitter にもアップロードする例 by #Zapier + #python"
"とあるエンジニアの問題意識 2019-03-14"
"#Slack に添付ファイル・画像がアップロードされると自動的に public の共有リンクを作成する #python + #Zapier の活用例"
"とあるエンジニアの問題意識 2019-03-13"
"スクラム歴は長いけど #スクラム 初心者"
"#Zapier 活用事例 -  #Slack のチャンネルに bot ではなく自分のユーザーとして投稿できる"
"とあるエンジニアの問題意識 2019-03-12"
"アプリケーションのORDERが重要な理由をスターバックスで考える #UI #UX #設計"
"#Twitter で いいねの履歴が検索しづらいので #IFTTT 連携させて #Slack に送る活用例"
"とあるエンジニアの問題意識 2019-03-10"
"#Mac のMissionControlを使わずに人生損していた"
"#python で #Github #API を叩いて Issue を 新規作成するスクリプトの例"
"Mac でウィンドウをDockにしまう / 元に戻すショートカット"
"君はベロシティという刀を見たことがあるか"
"「仕事した感」を殺し「生産性」の刀を挿せ ― とあるアジャイルエンジニアより"
"コードレビューは眠らせよ 〜難しい #レビュー のコツ〜"
"迷う時間はもったいなくない"
"#Divvy アプリで #Mac のウィンドウサイズをショートカットで最大化する"
"なぜおでんとチーム開発は難しいのか in スクラムフェス大阪2019 #スクラム"
"#Slack でいつの間にか、エンターキーで送信せず、改行だけする設定が追加されていた"
"集中力が低いプログラマへ"
"2019年の #スクラム フェス大阪で「ピンポン玉」のブレイクスルーゲームを体験してきた"
"#Mac の作業で #集中力 を上げるための禅モード"
"世界の設定に100倍の優しさを"
"君はMacのデスクトップ背景を見たことがあるか? とあるアジャイルエンジニアより愛を込めて"
"とあるエンジニアの問題意識 2019-03-01"
"とあるエンジニアの問題意識 2019-02-28"
"とあるエンジニアの問題意識 2019-02-27"
"とあるエンジニアの問題意識 2019-02-26"
"とあるエンジニアの問題意識 2019-02-25"
"とあるエンジニアの問題意識 2019-02-24"
"とあるエンジニアの問題意識 2019-02-23"
"#Slack で未読チャンネルに移動したときの位置を設定で変更する"
"とあるエンジニアの問題意識 2019-02-21"
"とあるエンジニアの問題意識 2019-02-20"
"とあるエンジニアの問題意識 2019-02-19"
"とあるエンジニアの問題意識 2019-02-18"
" sublimetext で 文字の折返しをオンオフするショートカット #Sublime"
"とあるエンジニアの問題意識 2019-02-17"
"#Twitter #API で得た #JSON を #jq と #shell でパースして URLの一覧を得る例"
"#Github #API で特定レポジトリの Issues の一覧を得る。Webブラウザからもアクセス可能で認証必要なし。"
"とあるエンジニアの問題意識 2019-02-16"
"#Twitter #API でページめくりをして200件超のツイートを取得する #python スクリプトの例"
"#Twitter #API でタイムラインから最新5件を取得して、はてなブックマークを一斉追加する #python スクリプトの例。 #sh "
"はてなブックマークを #API で追加する #python スクリプトの例"
"とあるエンジニアの問題意識 2019-02-15"
"とあるエンジニアの問題意識 2019-02-14"
"とあるエンジニアの問題意識 2019-02-13"
"摩擦コストの自己認識。 #超ポエム"
"とあるエンジニアの問題意識 2019-02-12"
"#python で #Twitter #API を叩き、日本時間基準で、昨日のまとめを #Markdown で作る例"
"#python 初心者が Twitter API で得られる created_at の String を日本時間で年月日出力しようとした記録コード"
"#Twitter の #API で、タイムラインから、省略なしのテキスト全文 + Media画像付きツイートの一覧を取得して #Github に使える #Markdown を取得する #python スクリプトの例"
"#Twitter #API でタイムラインから、メディアの画像URLつきの #Json を得る #python スクリプトの例"
"とあるエンジニアの問題意識 2019-02-09"
"#Github issue を作成すると #Medium #API で新規ポストする自動連携の例。Zapierを利用。"
"IFTTT と Zapier を使い、Twitterへのツイートをためて、1日ごとに Github issue を作成・更新し、エンジニアの振り返り日記のまとめを作るサンプル。"
"エンジニアの行動も心理要因に依存する。心理療法的な日記メソッドで、自己分析をして問題解決したい。 #ポエム"
"とあるエンジニアの問題意識。 意外にコスト感の高い #Markdown の論理マークアップ。会社の理想は基礎的勉強に理解のあること。優秀なエンジニアの口癖も「あれ、今何しようとしてたっけ」。 #ポエム"
"とあるエンジニアの問題意識。"
"はじめてプログラミングを覚える時のように python を触る。エンジニアのビギナーズマインドに、再会するには別言語。 #ポエム"
"#python スクリプトからMedium #API を叩いて新規ポストする例。公式APIリファレンスより。 @yumainaura"
"#python から Medium #API を叩いて自分のユーザー情報を取得する例"
"プログラミング中に話しかけられると、集中力の回復に時間がかかるのは何故? 短い時間のチャットやメールが集中力を奪う。「注意残余」とは。 #Slack #生産性 #ディープワーク"
"Medium #API で使えるトークンを設定する。サポートに問い合わせして有効化してもらった例。"
"#ssh コマンドで直接パスワードを記憶・指定する方法。公開鍵を使わないパターン。"
"#エンジニア の仕事術。口頭で話しかけるか  #Slack などのチャットツールを使うか。どっちにするか? ここでもコストとオーバーヘッドの関係性を考えたい。TCP と UDP のプロトコルの違いみたいな。 "
"IFTTTを使って、Twitterにハッシュタグつきでツイートしたら、はてなブログに自動投稿する例。画像表示もインライン対応。"
"python で テキストから複数個のハッシュタグを正規表現で抽出して、結果を配列で得る"
"Zappier で Github Issue 作成をトリガーにして、pythonスクリプトからGoogle翻訳APIを叩き、翻訳済みの新しいGithub Issue を作成する例。日本語から英語へバージョン。"
"Google翻訳APIをpythonスクリプトで叩いて英語を日本語に翻訳する。"
"Google翻訳APIをシェルスクリプトで叩いて英語を日本語に翻訳する。ほとんど公式チュートリアルのまま。"
"Google Cloud の認証トークンを gcloud コマンドで取得する。環境変数でサービスアカウントファイルを指定する例。"
"「ソフトウェア開発者の人生マニュアル」にキャリア、就職、転職の裏技を学びたい、3行スナップショットまとめ。"
"Zapierを使って、Github Issue作成をトリガーに、PythonスクリプトからQiita APIを叩いて新規投稿する例"
"PythonでQiita APIを叩いて新規投稿するスクリプトの例 (最小構成的な)"
"Qiita API を使って Ruby スクリプトで新規投稿する例。json の gem とか使わず、ヒアドキュメントで強引に json 投げつけるバージョン。"
"Qiita API で自分のユーザー情報を取得するRubyのスクリプト例"
"Qiita API で公開情報の記事一覧を取得する、アクセストークンなどの認証必要なしのスクリプト例 "
"Zapier で python script を走らせて Qiita API で自分の記事投稿一覧を取得する。"
"世界で一番簡単に幸せになる方法。それは太陽の光を浴びること。本当の幸福を感じてる?重要なのは、お金か、社会的成功か、自己啓発か、アウトプット学習か、自己投資家、株式投資か。自然を忘れた人間が生きるための、必要なもののすべてより。愛を込めて。"
"人間の幸福のために科学や技術が役立てられる時代。iPhoneの音声入力で、僕は自然な人間生活のための、デバイスの未来を感じる。スターバックスやマクドナルドにいながら、ディスプレイを見ずに、スマホゾンビにならず、街行く人々を見ながらTwitterもできる。妻と観光旅行だってできる。素晴らしさ。"
"エンジニアの仕事論。もし就職、転職するならどんな会社?給与や待遇以外にも10項目ぐらい書き出してみない?セルフチェック。就職の心理的ジャーナリングみたいな?"
"ヨドバシカメラでMacBookAirの充電に使える、充電ケーブルを探す。物理的世界の互換性の問題があって、なかなか0.5メートルが見つからない。膨大なラインナップするがある。だけどデジタルのサービスやソフトウェアも、結局は現実世界の、限界の中に存在する。エンジニアも生物的な人間だし。"
"Zapier 最高すぎるよね! Github Issue への Post を Twitter に画像つきでツイートする例。"
"これはやばい。ZapierでGithub Issueを作成すると、はてなブログに投稿する連携のサンプル。"
"ZapierでGit hub Issue を自動翻訳して Github Gist に投稿して Twitterに共有する例 (1000文字数制限あり) (有料ププラン)"
"新MacBook Pro (2018)のキーボード改良は静音化だけ?嘘でしょ?明らかに打ちやすくなったような気がしたのだけれど‥。"
"2つの絵文字を組み合わせてオリジナルを作るジェネレーター的な「絵文字ビルダー」が全然日本語でGoogle 検索できなかったので標識を残す"
"📝 root権限無しで利用できるらしいRed Hat Enterprise Linuxの新コンテナエンジン Podman が気になるだけの人生だった"
"名刺を持たないエンジニア。Twitter/Qiita/Githubアカウント交換には、自分の本名をひらがなでGoogle検索できるようにしておけば良い。"
"2019-01-21 大阪IT勉強会のLTで、機械学習使える Tensorflow.js や、新しい美術メディア「ARTLOGE」の話を聞いてきた!僕はQiitaプチ炎上案件や、最近のiPhone音声入力の素晴らしさについて声ガラガラで語った。"
"ネット炎上。匿名アカウントの批判はノーカウント。匿名のいいねも。1人の人間が複数アカウントで荒らしてる説。証明不可能なので攻め手有利。ずるっ。暴力やハラスメントのロジックを理解して、心のレジリエンスな対策しよう。ここでもセルフトークは役立つから心理セラピーとしてオススメ。"
"たとえばRubyのgitignoreを一瞬で作るだけで強くなれること"
"OSXのSublimeText3でGoogle日本語入力のタブキーが効かない問題を解消する。コマンド例付き。"
"エンジニアとして長く続けていくにはどうすれば良い?プログラミングを好きになって、嫌いにならないためには?周囲のエンジニアとの難易度調整、精神のバッファはとても重要かもしれない。"
"「文系でプログラマーになったけど色々失敗して3年半で会社を辞めた話」を一瞬でまとめたい"
"システム設計と腐敗度の関係。人を苦しめるコーディング。時限爆弾のコントロール。"
"Qiitaプチ炎上の著者が語る、ネットでの炎上対策はどうする?自然災害時のレジリエンスの持ち方、メンタル対策と根本的に同じかもしれない。悪いイメージの咀嚼を止める。人間の心理構造について理解する。マインドフルネスと瞑想の習慣はとても役立つ。いつ起こるかわからない自然災害、ネット炎上対策のリテラシ。"
"SQLアンチパターンは勉強するのに、炎上アンチパターンは勉強しないの? エンジニアの国語力について、人知れず記事を書いたつもりが、プチ炎上の要素がたくさん詰まっていた件。iPhone音声入力で日本語がおかしい。複数のツッコミどころ。感情的になりやすいトピック。炎上に必要な燃料が勢ぞろい。"
"エンジニアは無理数とか、そんな数式を知らなくてもできる職業。数学の世界も面白そうだけどね。"
"スーパーエンジニアの話は、相槌を打ってヒアリングするだけでも生産性が上がるかも。"
"2019/01/20   まとめ 私の最強アウトプット生活。 Twitterでリプライのチェーン。着想、試行錯誤、140文字の圧縮まとめ。IFTTTでSlack連携してQiita / はてなブログにコピペで投稿。Github Issues / Google Docsでアウトプット財産をキープ。"
"最強のアウトプット生活を目指して。iPhone音声入力 iPHone Notes Twitter Github Medium IFTTT Zapier などの連携方法を改めて考え直したい"
"Twitterのリプライと引用リツイートは、人間活動であるサインの送受信に使われている。小さな違いかもしれないが、大きな違い。そのサインを見て、僕らは自分自身の反応を決める。僕らはTwitterのインターフェイスを使いながら、人間同士のサインを読みあっている。"
"エンジニアには国語的能力が重要だ。実は言語的能力が80%を占める文系の仕事だとさえ思える。理系的な要素だけでプログラミングが成り立つと思ったら間違いだ。ロマンロランのジャンクリストフを読もう。良い小説だから。日本語や言語的なものを大いに愛そうじゃないか。僕らプログラマは。"
"最強のアウトプットの発信体勢を作りたい。本当に惜しいEvernoteの共有。"
"EvernoteのNoteをTwitterで共有してみるテスト 。イメージ画像反映されず。微妙かな‥。"
"認可期間をユーザーが指定できるタイプ Evernote with IFTTT"
"世界はデバイスが作る。人間はデバイスが生む。手が不器用なエンジニアのフリック入力は、10文字ぐらいしか打ち込めず、超要約まとめ感想ツイートで、Twitterのリプライ遊びをしていた。iPhone音声入力で人間性が変わったように見える。"
"大学生が Unity で作った有料スマホゲーム、iPhone の pertica  で3分遊んでみた感想"
"ゲーム制作にはインゲーム・アウトゲームという制作の分類があるらしい。「大学生が有料スマホゲームを作った全てを公開するよ」を三分でまとめる!"
"65歳からのプログラミング入門を5分で読む!"
" デポジットでお金を預けて、判定者を設定して、目標達成できなかったら全額没収! ( @nodenodenode1 on Twitter )  mobet.gq が気になったので調べてみた。"
"Paypalにはサンドボックス用のアカウントがあって1億円送金できるらしい。Qiita3分まとめクッキング。"
"Bigquery TIMESTAMP を unixtime INTEGER にキャストする"
"bq query コマンドで Standard SQL を使うオプションは --nouse_legacy_sql"
"Googleイメージ検索をGoogleChromeで、クリックせずに1ステップで使えるようにする"
"3分読書。戦略なきエンジニアは孫氏に学びたい。 Thanks @hiroshimatsuno on Twitter 傾聴のメンタルモデルは風林火山の「林」。名経営者のおすすめ本。 "
"低レーヤーの技術って勉強すべきなの?フレームワークだけじゃだめなの?Binary Hacks ―ハッカー秘伝のテクニック100選を一瞬だけ読む!"
"Twitter の全てのツイートのダウンロード機能を使ってみる。月単位でJsonファイルが吐き出され、HTMLとjsで読み込む、わりとモダンな作りだった。そのままHTMLとしての利用はしづらそう?"
"ときにはコミットメッセージは変更ファイル名のコメントを外すだけでは良いのでは?gitのメッセージ書くのが面倒くさい、どうにか省略化したい人へ。"
"Github PR / Issue の編集でテキストエリアが縦に狭い!短い!編集しづらい!広げたい! まさかの Edit ボタンを押した位置で高さが変わるみたいだ。"
"「入門 監視 ――モダンなモニタリングのためのデザインパターン」の目次だけ、ほんの少し読む!"
"社員のやる気を出すためには、やる気を出させようとしてはいけない。プラスをプラスするのではなく、マイナスをマイナスするのが良い。株式会社アクシアの記事、抜粋まとめ + エンジニアひとりごと。"
"Qiitaに記事を全部で1000個書いた。GoogleAnalyticsのアクセス解析を入れたら1日3000ユーザーのアクセスがあることがわかった。Qiitaすごいな。"
"スターバックスカードの登録には膨大なコストがかかる。アプリで番号入力を間違うとバックスペースできずに最初からやり直し。人間に優しいデバイスやインターフェイスの世界が来てほしい。"
"ときめきメモリアルが「ワクワクメモリアル」だったらどうする?エンジニアならわかる、言葉や名前の魔法。プログラミングは名前が9割。"
"Github PR Issue でのコメントでは Tabキー移動ではなく Control / Command + Enter のショートカットを使うべき"
"Twitterの初期プロトタイプと2019年版年版を見比べて感慨に浸ってみるテスト"
"エンジニアは集中力が必要な仕事。集中力を計測するメガネで、最も効果が上がったのは「周囲から遮断した空間で仕事をする」だったらしい。やばい情報だ。ディープワークだ。"
"エンジニアの勉強はスターバックスで。問題意識のスタート地点は別でも、ゴール地点は同じかも?戦士や魔法使いや鋼の剣など、たくさんの道具や仲間を用意して、自分のもやもや、問題意識をクリアしたい。"
"MacBookAir2018のバタフライキーボードは使いやすいけど、手が凍っている冬に使うのは辛いかもしれない。バリアフリーなデバイスとは、おじいちゃんおばあちゃんの手でも使える端末だ。僕らの肉体も日々変化しているから、最低状態でも使える端末。"
"特にエンジニアとという人間には、理解したいと言う根本的な欲求がある。だけど全てを理解することなど到底できないと言うジレンマも抱えている。これが非常に辛い。神様にならなければ無理だ。神様だって無理だ。"
"Twitterでは面白いツイートが流れてくるということが大事だ。根本的なことに改めて気づいたぞ。だけどタイムラインはとても荒れやすいし壊れやすい。やはり機械による情報集約が求められる時代じゃないだろうか。"
"エンジニアとしてアラサーで初就職してナルコレプシー的な病気から命が救われたかもしれない話。"
"Mac Book 2018 OS Mojave Touch ID の指の登録上限は三個だけ?人間の指は10本あるのになぜだよ。"
"いまさらだけど Qiita と Google Analytics の連携は一瞬で簡単すぎた"
"release の単位に対して git tag を切る"
"仕事に集中できない?注意散漫?MacBookのタッチパッドとか、ミニホワイトボードに世界にひとつだけのタスクを書いて、眼の前のやることに集中するハック。"
"プログラミングのトリビア。「ネットワーク漢字フィルターの頭文字」をとって nkf らしい。"
"今更 Desktop MAc Github 使ってみたけど、何ができるかよく分からなかった報告。"
"視覚過敏?聴覚過敏?どっちもかも? エンジニアの仕事術。集中力と生産性を上げる「集中スコープ」みたいなのがほしかったけど、ニット帽がそのかわりになるかも?コンビニで1000円で買える2Wayのやつ。"
"コードにコメントを書かなくても、モックしているだけで事情は伝わるのでは?とスーパーエンジニアと話した思い出"
"エンジニアがドラクエなら?どの作戦が好き?ぼくは完全に「いのちだいじに」だけど。"
"iPhoneの音声入力の日本版のローカライズがひどい。サービス品質を支えるのは国民ユーザの利用度や熱望かもしれない。"
"まだアウトプット学習のローカライズしてないの? タイトルを変えてQiitaにも、はてなブログにも投稿する実験。Googleは dont be evil とは言わないよね?"
"Twitterは日本語でも140文字の制限を撤廃してブログみたいになるべきなのか?でも完全な自由はTwitter独自の生態系を壊してしまうかもしれないな。"
"ドリカムの「未来予想図Ⅱ」に学びたい。エンジニアのアウトプット学習のチャンスを逃すともう二度と戻ってこないかもしれない。描かれなかったQiitaも永遠に戻ってこないかもしれない。夜の中で星をつかむように、いつでも名言を残せる手段を用意しておきたい。"
"Googleの画像アップロード検索はなぜ使われないんだろう。街角のおじちゃんにジャンパーのビジュアルからテキスト情報を教えてもらって考えた。"

use case

最初の1個の JSON を見てみる

$ cat log/list.json| jq '.[0]'

{
  "rendered_body": "<p>collections の defaultdict と ChainMap を合わせて使う</p>\n\n<h1>\n<span id=\"wanna-do\" class=\"fragment\"></span><a href=\"#wanna-do\"><i class=\"fa fa-link\"></i></a>wanna do</h1>\n\n<ul>\n<li>こういう辞書を <code>d = {\"a\":1, \"b\",2}</code> </li>\n<li>こう呼び出した時 <code>d[\"c\"]</code>\n</li>\n<li> KeyError ではなくデフォルト値が入っていてほしい</li>\n</ul>\n\n<h1>\n<span id=\"example\" class=\"fragment\"></span><a href=\"#example\"><i class=\"fa fa-link\"></i></a>example</h1>\n\n<div class=\"code-frame\" data-lang=\"py\"><div class=\"highlight\"><pre><span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"kn\">import</span> <span class=\"n\">defaultdict</span>\n<span class=\"kn\">import</span> <span class=\"nn\">collections</span>\n\n<span class=\"n\">existing_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s\">\"a\"</span><span class=\"p\">:</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s\">\"b\"</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">}</span>\n\n<span class=\"n\">default_dict</span> <span class=\"o\">=</span> <span class=\"n\">defaultdict</span><span class=\"p\">(</span><span class=\"nb\">int</span><span class=\"p\">)</span>\n\n<span class=\"n\">merged_dict</span> <span class=\"o\">=</span> <span class=\"n\">collections</span><span class=\"o\">.</span><span class=\"n\">ChainMap</span><span class=\"p\">(</span><span class=\"n\">existing_dict</span><span class=\"p\">,</span> <span class=\"n\">default_dict</span><span class=\"p\">)</span>\n</pre></div></div>\n\n<h1>\n<span id=\"exe\" class=\"fragment\"></span><a href=\"#exe\"><i class=\"fa fa-link\"></i></a>exe</h1>\n\n<div class=\"code-frame\" data-lang=\"py\"><div class=\"highlight\"><pre><span class=\"n\">Python</span> <span class=\"mf\">3.7</span><span class=\"o\">.</span><span class=\"mi\">2</span> <span class=\"p\">(</span><span class=\"n\">default</span><span class=\"p\">,</span> <span class=\"n\">Jan</span> <span class=\"mi\">13</span> <span class=\"mi\">2019</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">:</span><span class=\"mi\">50</span><span class=\"p\">:</span><span class=\"mo\">01</span><span class=\"p\">)</span>\n<span class=\"p\">[</span><span class=\"n\">Clang</span> <span class=\"mf\">10.0</span><span class=\"o\">.</span><span class=\"mi\">0</span> <span class=\"p\">(</span><span class=\"n\">clang</span><span class=\"o\">-</span><span class=\"mf\">1000.11</span><span class=\"o\">.</span><span class=\"mf\">45.5</span><span class=\"p\">)]</span> <span class=\"n\">on</span> <span class=\"n\">darwin</span>\n<span class=\"n\">Type</span> <span class=\"s\">\"help\"</span><span class=\"p\">,</span> <span class=\"s\">\"copyright\"</span><span class=\"p\">,</span> <span class=\"s\">\"credits\"</span> <span class=\"ow\">or</span> <span class=\"s\">\"license\"</span> <span class=\"k\">for</span> <span class=\"n\">more</span> <span class=\"n\">information</span><span class=\"o\">.</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"kn\">from</span> <span class=\"nn\">collections</span> <span class=\"kn\">import</span> <span class=\"n\">defaultdict</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"kn\">import</span> <span class=\"nn\">collections</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">existing_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s\">\"a\"</span><span class=\"p\">:</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s\">\"b\"</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">}</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">default_dict</span> <span class=\"o\">=</span> <span class=\"n\">defaultdict</span><span class=\"p\">(</span><span class=\"nb\">int</span><span class=\"p\">)</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">merged_dict</span> <span class=\"o\">=</span> <span class=\"n\">collections</span><span class=\"o\">.</span><span class=\"n\">ChainMap</span><span class=\"p\">(</span><span class=\"n\">existing_dict</span><span class=\"p\">,</span> <span class=\"n\">default_dict</span><span class=\"p\">)</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">merged_dict</span><span class=\"p\">[</span><span class=\"s\">\"a\"</span><span class=\"p\">]</span>\n<span class=\"mi\">1</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">merged_dict</span><span class=\"p\">[</span><span class=\"s\">\"b\"</span><span class=\"p\">]</span>\n<span class=\"mi\">2</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">merged_dict</span><span class=\"p\">[</span><span class=\"s\">\"c\"</span><span class=\"p\">]</span>\n<span class=\"mi\">0</span>\n<span class=\"o\">&gt;&gt;&gt;</span> <span class=\"n\">merged_dict</span><span class=\"p\">[</span><span class=\"s\">\"d\"</span><span class=\"p\">]</span>\n<span class=\"mi\">0</span>\n</pre></div></div>\n\n<h1>\n<span id=\"ps\" class=\"fragment\"></span><a href=\"#ps\"><i class=\"fa fa-link\"></i></a>p.s</h1>\n\n<ul>\n<li>もしかしたらものすごく迂遠なことをやっていないだろうか</li>\n<li>何か変だったら白ヤギさんからお手紙ください</li>\n</ul>\n\n<h1>\n<span id=\"original-by-github-issue\" class=\"fragment\"></span><a href=\"#original-by-github-issue\"><i class=\"fa fa-link\"></i></a>Original by Github issue</h1>\n\n<p><a href=\"https://github.com/YumaInaura/YumaInaura/issues/1289\" class=\"autolink\" rel=\"nofollow noopener\" target=\"_blank\">https://github.com/YumaInaura/YumaInaura/issues/1289</a></p>\n",
  "body": "collections の defaultdict と ChainMap を合わせて使う\n\n# wanna do\n\n- こういう辞書を `d = {\"a\":1, \"b\",2}` \n- こう呼び出した時 `d[\"c\"]`\n-  KeyError ではなくデフォルト値が入っていてほしい\n\n# example\n\n```py\nfrom collections import defaultdict\nimport collections\n\nexisting_dict = {\"a\":1, \"b\":2}\n\ndefault_dict = defaultdict(int)\n\nmerged_dict = collections.ChainMap(existing_dict, default_dict)\n```\n\n# exe\n\n```py\nPython 3.7.2 (default, Jan 13 2019, 12:50:01)\n[Clang 10.0.0 (clang-1000.11.45.5)] on darwin\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n>>> from collections import defaultdict\n>>> import collections\n>>> existing_dict = {\"a\":1, \"b\":2}\n>>> default_dict = defaultdict(int)\n>>> merged_dict = collections.ChainMap(existing_dict, default_dict)\n>>> merged_dict[\"a\"]\n1\n>>> merged_dict[\"b\"]\n2\n>>> merged_dict[\"c\"]\n0\n>>> merged_dict[\"d\"]\n0\n```\n\n# p.s\n\n- もしかしたらものすごく迂遠なことをやっていないだろうか\n- 何か変だったら白ヤギさんからお手紙ください\n\n# Original by Github issue\n\nhttps://github.com/YumaInaura/YumaInaura/issues/1289\n",
  "coediting": false,
  "comments_count": 7,
  "created_at": "2019-04-15T13:10:04+09:00",
  "group": null,
  "id": "52e110976b069106f0c2",
  "likes_count": 3,
  "private": false,
  "reactions_count": 0,
  "tags": [
    {
      "name": "Python",
      "versions": [
        "0.0.1"
      ]
    }
  ],
  "title": "#python で値を持った既存の辞書に、デフォルト値つきの辞書をマージする例 ( もう if 'key' in dict なんて書きたくないんですよ‥ )",
  "updated_at": "2019-04-15T13:10:04+09:00",
  "url": "https://qiita.com/YumaInaura/items/52e110976b069106f0c2",
  "user": {
    "description": "https://www.wantedly.com/users/93140896 /  Ruby on Rails 業務経験 約4年 / Perl PHP Python Golang Linux Apache MySQL BigQuery Jenkins ansible など /  いなうらゆうま / YumaInaura / 稲浦悠馬",
    "facebook_id": "yumainaura",
    "followees_count": 184,
    "followers_count": 164,
    "github_login_name": "YumaInaura",
    "id": "YumaInaura",
    "items_count": 1237,
    "linkedin_id": "",
    "location": "Osaka",
    "name": "Inaura いなうら 稲浦 Yuma ゆうま 悠馬",
    "organization": "",
    "permanent_id": 89618,
    "profile_image_url": "https://qiita-image-store.s3.amazonaws.com/0/89618/profile-images/1546214964",
    "team_only": false,
    "twitter_screen_name": "YumaInaura",
    "website_url": "http://twitter.com/yumainaura"
  },
  "page_views_count": null
}

Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1293

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2019-04-15

Discussion