

client_email 필드가 포함되어 있으며, 이는 다음 단계에서 필요합니다example.com) 또는https://example.com) 중 선택my-service-account@project-name.google.com.iam.gserviceaccount.comhttps://www.googleapis.com/auth/indexing을 사용NEXT_PUBLIC_GOOGLE_API_CREDENTIALS={"type": "service_account","project_id": "apipromlee","private_key_id": ...npm install googleapisexport const dynamic = "force-dynamic";
import { createResponse } from "@/config/apiResponse";
import { NextRequest, NextResponse } from "next/server";
import { google } from "googleapis"; 
 
export async function POST(req: NextRequest) {
  const url = req.nextUrl.searchParams.get("url");
 
  const key = JSON.parse(process.env.NEXT_PUBLIC_GOOGLE_API_CREDENTIALS!);
  console.log(key.private_key, key.client_email);
  const jwtClient = new google.auth.JWT(
    key.client_email,
    undefined,
    key.private_key,
    ["https://www.googleapis.com/auth/indexing"],
    undefined,
  );
 
  jwtClient.authorize((err, tokens) => {
    if (err) {
      console.error(err);
      return;
    }
    if (tokens) {
			console.log(tokens.access_token);
    }
  });
  return NextResponse.json(createResponse("get token complete"));
}{
  "url": "https://www.promlee.com/new-page",
  "type": "URL_UPDATED"
}https://indexing.googleapis.com/v3/urlNotifications:publish 엔드포인트로 HTTP POST 요청을 보내면 됩니다. (developers.google.com↗)
이 코드는 Next.js route에서 이어서 작성한 코드입니다. 위의 코드에서 토큰을 발급받은 후, 다음과 같이 사용합니다.export const dynamic = "force-dynamic";
import { createResponse } from "@/config/apiResponse";
import { NextRequest, NextResponse } from "next/server";
import { google } from "googleapis";
 
export async function POST(req: NextRequest) {
  const url = req.nextUrl.searchParams.get("url");
 
  const key = JSON.parse(process.env.NEXT_PUBLIC_GOOGLE_API_CREDENTIALS!);
  const jwtClient = new google.auth.JWT(
    key.client_email,
    undefined,
    key.private_key,
    ["https://www.googleapis.com/auth/indexing"],
    undefined,
  );
 
  jwtClient.authorize((err, tokens) => {
    if (err) {
      console.error(err);
      return;
    }
    if (tokens) {
      fetch("https://indexing.googleapis.com/v3/urlNotifications:publish", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${tokens.access_token}`,
        },
        body: JSON.stringify({
          url: url,
          type: "URL_UPDATED",
        }),
      })
        .then((res) => {
          console.log("googleIndexing" + res.status);
        })
        .catch((err) => {
          console.log(err.message);
        });
    }
  });
 
  return NextResponse.json(createResponse("url send complete"));
}{
  "url": "https://www.promlee.com/old-page",
  "type": "URL_DELETED"
}GET https://indexing.googleapis.com/v3/urlNotifications/metadata?url=https%3A%2F%2Fwww.promlee.com%2Fpage