Liệt kê, thêm và xoá các Sites với Google Search Java API
Như bạn biết, trong Google Search Console bạn cần phải khai báo các Sites mà bạn sở hữu, chúng được gọi là các tài sản (properties).
Có 2 loại tài sản:
Property Type | Description |
Domain | Kiểu tài sản này là một tên miền mà bạn sở hữu. Sau khi được xác minh nó sẽ được theo dõi (track) bởi Google Search Console. Tất cả các tên miền bao gồm cả các tên miền phụ, với tất cả các giao thức (HTTP hay HTTPS) đều được nó theo dõi.
|
URL Prefix | Tài sản này là một phần của một website được chỉ định bởi một tiếp đầu ngữ, chẳng hạn:
Google Search Console chỉ theo dõi (track) các URLs phù hợp với tiếp đầu ngữ của tài sản này. |
Trong bài viết này tôi sẽ hướng dẫn bạn sử dụng Google Search Console Java API để liệt kê, thêm và xoá các Sites trên Google Search Console.
1. Các yêu cầu đòi hỏi
Các yêu cầu đòi hỏi để làm việc với Google Search Java API được đề cập trong bài viết dưới đây. Bài viết này cũng đề cập các cách khác nhau để tạo đối tượng HttpRequestInitializer (Với API Key, OAuth Client Id hoặc Service Account).
Một lớp tiện ích để tạo đối tượng HttpRequestInitializer, đối tượng này cung cấp thông tin xác thực (credentials) cho các request mỗi khi chúng được gửi tới Google:
MyUtils.java
package org.o7planning.googleapis.utils;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.FileUtils;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.json.JsonObjectParser;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.client.util.ObjectParser;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.auth.oauth2.ServiceAccountCredentials;
public class MyUtils {
public static final String SERVICE_ACCOUNT_FILE_PATH = "/Volumes/New/_gsc/test-google-search-console-key.json";
private static byte[] serviceAccountBytes;
public static HttpRequestInitializer createHttpRequestInitializer(String... scopes) throws IOException {
InputStream serviceAccountInputStream = getServiceAccountInputStream();
GoogleCredentials credentials = ServiceAccountCredentials //
.fromStream(serviceAccountInputStream) //
.createScoped(scopes);
HttpRequestInitializer requestInitializer = new HttpRequestInitializer() {
@Override
public void initialize(HttpRequest request) throws IOException {
HttpCredentialsAdapter adapter = new HttpCredentialsAdapter(credentials);
adapter.initialize(request);
//
if (request.getParser() == null) {
ObjectParser parser = new JsonObjectParser(GsonFactory.getDefaultInstance());
request.setParser(parser);
}
//
request.setConnectTimeout(60000); // 1 minute connect timeout
request.setReadTimeout(60000); // 1 minute read timeout
}
};
return requestInitializer;
}
public static synchronized InputStream getServiceAccountInputStream() throws IOException {
if (serviceAccountBytes == null) {
serviceAccountBytes = FileUtils.readFileToByteArray(new File(SERVICE_ACCOUNT_FILE_PATH));
}
return new ByteArrayInputStream(serviceAccountBytes);
}
}
Một lớp tiện ích để tạo đối tượng SearchConsole.Sites, một đối tượng quan trọng có liên quan tới tất cả các ví dụ trong bài viết này.
MySiteUtils.java
package org.o7planning.googleapis.a14299.site;
import java.io.IOException;
import java.security.GeneralSecurityException;
import org.o7planning.googleapis.utils.MyUtils;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.searchconsole.v1.SearchConsole;
import com.google.api.services.searchconsole.v1.SearchConsoleScopes;
public class MySiteUtils {
private static final String APPLICATION_NAME = "My-Application";
public static SearchConsole.Sites getSitesClient(String applicationName) //
throws IOException, GeneralSecurityException {
//
// @scopes: WEBMASTERS or WEBMASTERS_READONLY
//
HttpRequestInitializer httpRequestInitializer = MyUtils
.createHttpRequestInitializer(SearchConsoleScopes.WEBMASTERS);
//
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
SearchConsole client = new SearchConsole.Builder( //
httpTransport, GsonFactory.getDefaultInstance(), httpRequestInitializer) //
.setApplicationName(applicationName) //
.build();
SearchConsole.Sites siteClient = client.sites();
return siteClient;
}
public static SearchConsole.Sites getSitesClient() //
throws IOException, GeneralSecurityException {
return getSitesClient(APPLICATION_NAME);
}
}
2. Liệt kê các Sites
Liệt kê tất cả các Sites đã được thêm vào Google Search Console của bạn, chúng bao gồm cả các Sites chưa được xác minh.
ListSiteExample.java
package org.o7planning.googleapis.a14299.site;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.List;
import com.google.api.services.searchconsole.v1.SearchConsole;
import com.google.api.services.searchconsole.v1.model.SitesListResponse;
import com.google.api.services.searchconsole.v1.model.WmxSite;
public class ListSiteExample {
public static void main(String[] args) throws IOException, GeneralSecurityException {
SearchConsole.Sites siteClient = MySiteUtils.getSitesClient();
SearchConsole.Sites.List listRequest = siteClient.list();
SitesListResponse listResponse = listRequest.execute();
System.out.println("Sites.List Response: " + listResponse.toPrettyString());
List<WmxSite> siteList = listResponse.getSiteEntry();
for (WmxSite site : siteList) {
System.out.println("\n- permissionLevel: " + site.getPermissionLevel());
System.out.println("- siteUrl: " + site.getSiteUrl());
}
}
}
Output:
Sites.List Response: {
"siteEntry": [
{
"permissionLevel": "siteOwner",
"siteUrl": "https://www.langlearning.net/"
},
{
"permissionLevel": "siteOwner",
"siteUrl": "sc-domain:langlearning.net"
},
{
"permissionLevel": "siteOwner",
"siteUrl": "https://langlearning.net/"
}
]
}
- permissionLevel: siteOwner
- siteUrl: https://www.langlearning.net/
- permissionLevel: siteOwner
- siteUrl: sc-domain:langlearning.net
- permissionLevel: siteOwner
- siteUrl: https://langlearning.net/
3. Xem thông tin một Site cụ thể
Ví dụ, lấy thông tin của một Site cụ thể, trong đó bao gồm cả quyền (permission) của bạn đối với Site này.
Các giá trị có thể của permissionLevel:
- "siteFullUser"
- "siteOwner"
- "siteRestrictedUser"
- "siteUnverifiedUser"
GetSiteExample.java
package org.o7planning.googleapis.a14299.site;
import java.io.IOException;
import java.security.GeneralSecurityException;
import org.o7planning.googleapis.MyTestConstants;
import com.google.api.services.searchconsole.v1.SearchConsole;
import com.google.api.services.searchconsole.v1.model.WmxSite;
public class GetSiteExample {
private static void getOneSiteInfo(String siteId) throws IOException, GeneralSecurityException {
SearchConsole.Sites siteClient = MySiteUtils.getSitesClient();
SearchConsole.Sites.Get getRequest = siteClient.get(siteId);
WmxSite site = getRequest.execute();
System.out.println("\nSite: " + site.toPrettyString());
System.out.println("- permissionLevel: " + site.getPermissionLevel());
System.out.println("- siteUrl: " + site.getSiteUrl());
}
public static void main(String[] args) throws IOException, GeneralSecurityException {
//
// @siteUrl:
// https://langlearning.net/ (Needs suffix "/") (for a URL-prefix property)
// sc-domain:langlearning.net (for a Domain property)
//
getOneSiteInfo(MyTestConstants.siteUrl);
}
}
Output:
Site: {
"permissionLevel": "siteOwner",
"siteUrl": "https://langlearning.net/"
}
- permissionLevel: siteOwner
- siteUrl: https://langlearning.net/
4. Thêm một Site
Tiếp theo, trong phần này chúng ta sẽ sử dụng Google Search API để thêm một Site vào Google Search Console. Trong một số trường hợp chúng sẽ tự động được xác minh, chẳng hạn:
- langlearning.net (Sc Domain property) Verified!
- ---> https://langlearning.net/app/en/ (URL Prefix property) verified.
- ---> http://www.langlearning.net/ (URL Prefix property) verified.
Hoặc:
- http://www.langlearning.net (URL Prefix property) Verified!
- ---> http://www.langlearning.net/app/en/ (URL Prefix property) Verified!
Chú ý: Google Search API không hỗ trợ việc xác minh một Site, nếu bạn quan tâm tới điều này hãy sử dụng Google Site Verification API.
- Java Google Site Verification API
AddSiteExample.java
package org.o7planning.googleapis.a14299.site;
import java.io.IOException;
import java.security.GeneralSecurityException;
import org.o7planning.googleapis.MyTestConstants;
import com.google.api.services.searchconsole.v1.SearchConsole;
public class AddSiteExample {
//
// @siteUrl:
// https://langlearning.net/ (Needs suffix "/") (for a URL-prefix property)
// https://sub1.bar.com/ (Needs suffix "/") (for a URL-prefix property)
// sc-domain:foo.com (for a Domain property)
//
private static void addSite(String siteUrl) throws IOException, GeneralSecurityException {
SearchConsole.Sites siteClient = MySiteUtils.getSitesClient();
SearchConsole.Sites.Add addRequest = siteClient.add(siteUrl);
addRequest.execute();
System.out.println("Done!");
}
public static void main(String[] args) throws IOException, GeneralSecurityException {
//
// @siteUrl: sc-domain:bar.com
// @siteUrl: http://www.bar.com/
//
addSite(MyTestConstants.siteUrlToAdd1);
}
}
5. Xoá một Site
Ví dụ, xoá một Site:
DeleteSiteExample.java
package org.o7planning.googleapis.a14299.site;
import java.io.IOException;
import java.security.GeneralSecurityException;
import com.google.api.services.searchconsole.v1.SearchConsole;
public class DeleteSiteExample {
private static void deleteSite(String siteId) throws IOException, GeneralSecurityException {
SearchConsole.Sites siteClient = MySiteUtils.getSitesClient();
SearchConsole.Sites.Delete deleteRequest = siteClient.delete(siteId);
deleteRequest.execute();
System.out.println("Done!");
}
public static void main(String[] args) throws IOException, GeneralSecurityException {
// @siteUrl:
// https://langlearning.net/ (Needs suffix "/") (for a URL-prefix property)
// https://sub1.bar.com/ (Needs suffix "/") (for a URL-prefix property)
// sc-domain:foo.com (for a Domain property)
//
String siteId = "https://www.langlearning.net/";
deleteSite(siteId);
}
}
- Tạo Google API Console Project và OAuth2 Client ID
- Đăng ký Google Map API Key
- Kiếm tiền chuyên nghiệp với Ezoic - đối tác của Google
- Hướng dẫn sử dụng Google reCAPTCHA trong ứng dụng Web Java
- Bắt đầu với Google Search Console Java API
- Đánh chỉ mục trang với Java Google Indexing API
- Thao tác với tập tin và thư mục trên Google Drive sử dụng Java
- Tạo một Google Service Account
- Liệt kê, thêm và xoá các Sites với Google Search Java API
- Liệt kê, thêm và xoá các Sitemap với Google Search Java API
Show More