わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

23日目: GitHub APIを叩いた結果をDBに入れるだけのコマンドを作る その1

kimikimi714.hatenablog.com

ここでGitHub APIを叩けるようにし

kimikimi714.hatenablog.com

kimikimi714.hatenablog.com

ココらへんでDBにデータを入れられるようにModelを作ったので、APIを叩いた結果を入れるコマンドを今度は作る。

Laravelにははじめから artisan というツールが用意されていて、ここに自分で作ったコマンドを増やしていくことができる。
デフォルトで入っているコマンドたちは php artisan list と叩くと出てきてくれる。

laravel.com

ここに自分用のコマンドを生やしてみよう。

$ php artisan make:command FetchGitHubRepo
Console command created successfully.

これでコマンドを作るための雛形が作られた。

まずは簡単に 15日目: GitHubのAPIを叩いてとりあえず中身を表示させる - わすれっぽいきみえ で実行した結果が見れるだけのコマンドを作ってみる。

<?php

namespace App\Console\Commands;

use Github\Client;
use Illuminate\Console\Command;

class FetchGitHubRepo extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'fetch:github {repo}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Fetch GitHub Repo data and save DB';

    /**
     * GitHub API client.
     *
     * @var Client
     */
    private $client;
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
        $this->client = new \Github\Client();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
      $repositories = $this->client->api('user')->repositories($this->argument('repo'));
      $this->info(json_encode($repositories));
    }
}

実行してみる。

$ php artisan fetch:github kimikimi714
[{"id":30191594,"name":"ansible_lesson","full_name":"kimikimi714\/ansible_... (長すぎるので省略)

いけたっぽい。 ではこのデータの中から必要な情報をそれぞれ引っこ抜いてこよう。

自分のリポジトリの中でPRしてるやつ見ても正直面白くないので、せっかくだし

github.com

Vue.jsを使って実験してみる。*1

本当はPRを限定したくはないが、一応自分が参加したものを使うことにしよう。

そこでおこないたいことは

  • UserにPR参加者のデータをDBに入れる。
  • ReviewにPRのデータをDBに入れる。
  • CommentにPRについたコメントを入れる。そのうちissueコメント(PRそのものに付いたコメント)とreviewコメント(ファイルの特定差分についてついたコメント)を区別してDBに入れる。

だいたいこんな感じ。

最初に書いた差分のままだとrepositoryの中の特定PRが選択できない状態なので、PRの番号を指定できるように変更しようと思う。

が、今日はここまで。

*1:実はこのためにも翻訳に参加してみたいと思っていた