client_email
필드가 포함되어 있으며, 이는 다음 단계에서 필요합니다example.com
) 또는https://example.com
) 중 선택my-service-account@project-name.google.com.iam.gserviceaccount.com
https://www.googleapis.com/auth/indexing
을 사용NEXT_PUBLIC_GOOGLE_API_CREDENTIALS={"type": "service_account","project_id": "apipromlee","private_key_id": ...
npm install googleapis
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!);
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