NAVERのニュースAPIを利用して記事一覧作成

# 概要
本日はNAVERのニュースAPIを利用してネットの記事を取得し、
ニュースの内容を「タイトル、説明、詳細確認」が表示される一覧を作成します。
検索キーワードは事前に固定で設定して一覧をCrontabから最新に更新します。

# 事前準備
①APM環境構築（APACHE+PHP+MySQL）
②外部からアクセス可能にするならポートフォワード（英：port forward）が必要
※外部からアクセスするためです。
③naverのapiキーの取得が必要です。

# ソース作成
下記のようにソースを作成し、次のパスに資材を配置します。

■ソース保存パス
下記のパスになるようにディレクトリを作成します。

~~~bash
/var/www/html/news/news.php
~~~

■コード

~~~php
<?
  $result = getInfo("日本"); //ネット記事の検索語「日本」に設定
  echo printInfo($result);

  function deleteTag($text, $flag)
  {
    if($flag==1)
    {
      $text = strtoupper($text);
      $text = str_replace("<B>","",$text);
      $text = str_replace("</B>","",$text);
      $text = str_replace("<BR>","",$text);
      $text = str_replace("</BR>","",$text);
      $text = str_replace("&QUOT;","'",$text);
    }
    return $text;
  }
  
  function getInfo($searchText)
  {
    $client_id = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
    $client_secret = "XXXXXXXXXXXXXXXXXXXXXXXX";
    $encText = urlencode($searchText);
    $url = "https://openapi.naver.com/v1/search/news?query=".$encText."&display=100&start=1&sort=date";
    $is_post = false;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, $is_post);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $headers = array();
    $headers[] = "X-Naver-Client-Id: ".$client_id;
    $headers[] = "X-Naver-Client-Secret: ".$client_secret;
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec ($ch);
    $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    //echo "status_code:".$status_code."";
    curl_close ($ch);

    if($status_code == 200)
    {
      return $response;
    }else{
      return "";
    }
  }
  function printInfo($result)
  {
    if($result != "") {
      //echo $response;
      $arr = json_decode($result);
      echo "<html><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /></head><body>";
      foreach($arr->items as $obj)
      {
        echo "<";
        echo deleteTag($obj->title,1)."><BR>\n";
        echo deleteTag($obj->description,1)."<BR>\n";
        echo "<a href='".deleteTag($obj->originallink,0)."'><<詳細内容を確認>></a><BR>\n";
        echo "<BR>\n";
      }
      echo "</body></html>";
    }else{
      echo "Error!";
  }
}
?>
~~~

# 動作確認
■コマンド実行
次のコマンドを実行し、ネット記事一覧のHTMLファイルを保存します。

~~~bash
pi@RPI4B:/var/www/html/news $ php news.php > test.html
pi@RPI4B:/var/www/html/news $ ls -al
total 112
drwxrwxrwx 2 root root  4096 Jan 26 15:31 .
drwxr-xr-x 4 root root  4096 Jan 20 23:09 ..
-rwxr-xr-x 1 pi   pi    2097 Jan 26 15:24 news.php
-rw-r--r-- 1 pi   pi   47943 Jan 26 15:31 test.html
pi@RPI4B:/var/www/html/news $
~~~

■HTML内容確認
APACHEとPHPが正常に実行されているのであれば次のように記事一覧が表示されます。
記事の詳細内容は「<<詳細内容の確認>>」リンクボタンから確認できます。

~~~bash
http://[raspberry pi ipaddress]/news/test.html
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162336/ce95a216-7055-ef29-04d3-da89a003f900.png)


# contab設定
ネットの記事は30分単位で更新されるように下記のcrontabを設定します。

■編集コマンド
crontab -e

■設定内容
URLから初期表示にしたい場合は、以下のように「index.html」ファイル名に指定がよいです。

~~~bash
# m h  dom mon dow   command
*/30 * * * * cd /var/www/html/news/;/usr/bin/php news.php > /var/www/html/news/index.html
~~~~

# API関連サンプルソース
下記のサイトを参照して作成したサンプルコードです。
※表示される言語は韓国語です。

■パラメータ名
title：タイトル
originallink：元の記事リンクアドレス
link：Naverの中にある記事リンクアドレス
description：説明
pubDate；公開日

■サンプルソース

https://developers.naver.com/docs/serviceapi/search/blog/blog.md#%EA%B2%80%EC%83%89-api-%EB%B8%94%EB%A1%9C%EA%B7%B8-%EA%B2%80%EC%83%89-%EA%B5%AC%ED%98%84-%EC%98%88%EC%A0%9C

# 終わりに
NaverのニュースAPIパラメータに元のニュースリンクアドレスもありましたので、
それを表示するようにしました。
これで30分単位に更新されるネット記事一覧を表示することができました。
応用すると自分のホームページにニュース検索画面が作成可能ですね。
今日はここまで！ ありがとうございます。