概要
まとめサイトからRSSを使ってAPIを作成したいと思いました。
対象のサイトは
乃木坂46まとめブログ
RSS: http://ngzk46.livedoor.blog/index.rdf
こちらのサイトのRSSを使います。ちなみにどのサイトのRSSでも問題ありません。
よくあるXMLをパースしてJSONを吐き出すところまでを実装していきます。
プロジェクトファイルのPathに移動する
$ cd (プロジェクトのディレクトリ)
Laravelプロジェクトファイルを作成
ディレクトリでLaravelをインストールする(今回はLaravel 5.5系で行う)
$ composer create-project --prefer-dist laravel/laravel PracticeLaravel "5.5.*"
$ cd PracticeLaravel
Controllerを作成する
$ php artisan make:controller ApiController
# Controller created successfully.
ルーティングの設定を行う
routes/web.php
// 初期設定はとりあえず削除する
//Route::get('/', function () {
// return view('welcome');
//});
// ルートを設定する
Route::get('/', 'ApiController@index');
ControllerでRSSのXMLを読み込んで連想配列に変換してJSONにして吐き出す
参考サイトはこちら
ApiController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ApiController extends Controller
{
public function index()
{
$xml = file_get_contents('http://ngzk46.livedoor.blog/index.rdf');
$xmlObject = simplexml_load_string($xml);
$xmlArray = json_decode( json_encode( $xmlObject ), TRUE );
return $xmlArray;
}
}
ローカルサーバーを立ち上げる
$ php artisan serve
# Laravel development server started: <http://127.0.0.1:8000>
http://127.0.0.1:8000 にアクセスする
Jsonとして出力されることが確認できます。

ただ、これだとどのパラメータをパースすればいいのかわからないので大抵はクロムの拡張機能を使って見やすいように修飾します。
JSONViewをクロムに追加すると下記のようにJSONが綺麗になります。

実際にパラメータをパースする
- channel
ApiController.php
class ApiController extends Controller
{
public function index()
{
$xml = file_get_contents('http://ngzk46.livedoor.blog/index.rdf');
$xmlObject = simplexml_load_string($xml);
$xmlArray = json_decode( json_encode( $xmlObject ), TRUE );
return $xmlArray["channel"];
}
}
結果は

- item
ApiController.php
class ApiController extends Controller
{
public function index()
{
$xml = file_get_contents('http://ngzk46.livedoor.blog/index.rdf');
$xmlObject = simplexml_load_string($xml);
$xmlArray = json_decode( json_encode( $xmlObject ), TRUE );
return $xmlArray['item'];
}
}

- 一つ目のitem
ApiController.php
class ApiController extends Controller
{
public function index()
{
$xml = file_get_contents('http://ngzk46.livedoor.blog/index.rdf');
$xmlObject = simplexml_load_string($xml);
$xmlArray = json_decode( json_encode( $xmlObject ), TRUE );
return $xmlArray['item'][0];
}
}

こんな感じの使い方になります。
これでモバイルアプリの人も簡単にAPIを作成できますね。