[laravel] index-now 만들기 updated_at: 2024-12-15 22:29

Index-Now 개발예제(Job를 이용한 비동기식)

이장에서는 IndexNow에 데이타를 전달하는 간단한 프로그램을 설명드릴 예정입니다.
기존 검색엔진들이 직접 검색로봇이 웹에 접근하던것과 달리 Index-now 검색엔진에 웹페이지의 생성/변경등을 강제적으로 알려주는 프로그램입니다. 일부 검색엔진(bing, yahoo..) 등등이 이 방법을 사용합니다.

Index-Now 프로그램

1. Job 제작

php artisan make:job IndexNow

명령을 실행하면 app/Jobs 폴더안에 IndexNow.php파일이 생성된다.
이곳에서 우리는 필요한 프로그램을 하여야 하는데 먼저 기본적인 모양만 보여드리기 위해 생성된 파일 그대로를 나열하였습니다.

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class IndexNow implements ShouldQueue
{
  use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

  /**
   * Create a new job instance.
   *
   * @return void
   */
  public function __construct()
  {
    //
  }

  /**
   * Execute the job.
   *
   * @return void
   */
  public function handle()
  {
      //
  }
}

이제 아래와 같이 변경하겠습니다.

..........
class IndexNow implements ShouldQueue
{
  protected $somedata;
  public function __construct($somedata)
  {
    $this->somedata = $somedata;
  }

  /**
   * Execute the job.
   *
   * @return void
   */
  public function handle()
  {
    $this->bingIndexNow($this->somedata);
  }

   private function bingIndexNow($path) {
    $client = new \GuzzleHttp\Client();
    $endpoint = 'api.indexnow.org';
    
    $urlList = [env('APP_URL').'/'.$path];
    $query = [
      'host'=> env('APP_URL'),
      'key'=> env('INDEXNOW_KEY'),
      'keyLocation'=>env('APP_URL').'/'.env('INDEXNOW_KEY').'.txt',
      'urlList'=> $urlList
    ];

    $response = $client->request('POST', $endpoint, ['form_params' => $query]); // GET 을 사용할 경우 'query' 변수에 담아 보낸다.
    Log::info('Bing IndexNow Status Code');
    Log::info($response->getStatusCode());
  }
}

2. Dispatch the Job

job을 실행하기위해서 controller에서 코드를 작성하면 됩니다. 저는 NowIndex라는 코드를 샘플로 작성해 보겠습니다.

<?php
..........
use App\Jobs\IndexNow;
..........
class NowIndexController extends Controller
{
  ..........
  public function indexNow(Request $request) {
    IndexNow::dispatch($request->somedata);
    ..........
  }
}

3. Queue Worker 실행하기

이 부분은 위에서 언급한 링크 Job에 대한 기본 정보 이해하기 로 대처하겠습니다.

평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글