やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

NewsApiでカテゴリ別にニュースを取得する

 政治カテゴリが無いのが残念。

成果物

情報源

前回まで

 私としては以下のような設定でニュースを取得したかった。が、できない……。30件しか取れない。「政治」カテゴリがない。fromパラメータがない。

request() {
    NEWS_API_KEY="${NEWS_API_KEY:-"`get_news_api_key`"}"
    curl https://newsapi.org/v2/top-headlines -G \
     -d country=jp \
     -d pageSize=100 \
     -d categoly=政治 \
     -d from=`date +"%Y-%m-%d"` \
     -H "X-Api-Key:${NEWS_API_KEY}"
}

 /v2/everythingを使うと国を指定できない……。fromパラメータはこちらにだけある。

 APIは3種類ある。

コード

get_news_categoly.sh

get_news_api_key() { cat "${HOME}/root/work/record/pc/account/newsapikey"; }
get_news_api_url() {
    local url="https://newsapi.org/v2/top-headlines"
    url+="?country=jp"
    url+="&pageSize=100"
    [ -n "$1" ] && url+="&category=${1}"
    echo "$url"
}
get_news_categolies() { echo "general technology science business health"; }
#news_categolies() { echo "general technology science business health entertainment sports"; }
#news_categolies() { echo "business entertainment general health science sports technology"; }
request() { curl ${1} -H "X-Api-Key:${NEWS_API_KEY:-"`get_news_api_key`"}"; }
format_json() {
    local name="_`basename "$1"`"
    local dir="`dirname "$1"`"
    cat "$1" | python3 -c 'import sys,json;print(json.dumps(json.loads(sys.stdin.read()),indent=4,ensure_ascii=False))' > "${dir%/}/${name}"
}
get_news() {
    local now="`date +"%Y%m%d%H%M%S"`"
    for categoly in `get_news_categolies`; do
        local url="`get_news_api_url ${categoly}`"
        request "${url}" > "${now}_${categoly}.json"
        format_json > "_${now}_${categoly}.json"
        sleep 1;
    done
}
get_news

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux