หน้านี้มีข้อมูลเกี่ยวกับแต่ละปลายทางที่พร้อมใช้งานผ่าน Tenor API หน้านี้จะแสดงข้อมูลต่อไปนี้สำหรับทุกๆ ปลายทาง
- URL ฐานที่จะใช้
- แนวทางปฏิบัติแนะนำที่ควรทำตาม
- พารามิเตอร์ที่ใช้ได้
- รูปแบบการตอบกลับ
- ตัวอย่างคำขอในแต่ละภาษา
ค้นหา
URL หลัก
https://tenor.googleapis.com/v2/search?<parameters>
รับออบเจ็กต์ JSON ที่มีรายการ GIF ที่เกี่ยวข้องมากที่สุดสำหรับชุดคำค้นหาที่กำหนด หมวดหมู่ อีโมจิ หรือการผสมผสานใดๆ ของรายการเหล่านี้
เมื่อคุณใส่พารามิเตอร์ URL searchfilter=sticker
ในคำขอ
ปลายทางการค้นหาของ Tenor จะแสดงสติกเกอร์แทน GIF ออบเจ็กต์การตอบกลับในการตอบกลับการค้นหาสติกเกอร์จะมีรูปแบบโปร่งใสในฟิลด์ media_formats
หากต้องการให้ระบบแสดงผลลัพธ์แบบสุ่มแทนการจัดเรียงตามความเกี่ยวข้อง ให้ใส่พารามิเตอร์ของ URL random=true
แนวทางปฏิบัติแนะนำ
- หากต้องการแยกความแตกต่างของการผสานรวม ให้ระบุพารามิเตอร์
client_key
พร้อมกับkey
ของ API - ระบุการค้นหาของผู้ใช้ตามที่พิมพ์ ซึ่งรวมถึงเครื่องหมายวรรคตอนและ อักขระพิเศษ
- เมื่อผู้ใช้ตัดสินใจเลือก GIF หรือสติกเกอร์ที่จะแชร์ เราขอแนะนำให้คุณใส่ คำกระตุ้นให้ดำเนินการที่สอดคล้องกันไปยังปลายทาง Register Share ด้วย การเรียกนี้เป็นตัวเลือกที่จะช่วยให้ AI ของเครื่องมือค้นหาของ Tenor ปรับแต่งผลการค้นหาได้
- หากต้องการควบคุมจำนวนและลำดับของ GIF ที่แสดง ให้ใช้พารามิเตอร์
limit
และpos
เช่น คุณอาจตั้งค่าlimit = 10
สำหรับผลการค้นหาเริ่มต้นของผู้ใช้ และโหลดตัวอย่าง GIF เหล่านั้นเพื่อให้ผู้ใช้เรียกดู หากผู้ใช้ ขอผลการค้นหาเพิ่มเติม ให้รวบรวมผลการค้นหาอีก 10 รายการโดยการเรียก API เดียวกัน แต่ตั้งค่าpos
เป็นค่าของช่องnext
จากการตอบกลับครั้งแรก คุณ สามารถใช้รูปแบบนี้เพื่อสร้างประสบการณ์การโหลดแบบ Lazy Loading ที่ราบรื่น ซึ่งจะช่วยลดการใช้แบนด์วิดท์ และทำให้ผู้ใช้ได้รับเวลาในการตอบสนองที่เร็วขึ้น เนื่องจากระบบจะโหลดตัวอย่าง GIF แบบขนานที่ฝั่งไคลเอ็นต์น้อยลง - หากต้องการคงการจัดประเภทความปลอดภัยของเนื้อหาภายในสำหรับ GIF ที่แสดง ให้ใช้พารามิเตอร์
ContentFilter
ค่าเริ่มต้นคือoff
- หากต้องการลดจำนวนรูปแบบเนื้อหาที่แสดงผล ให้ใช้พารามิเตอร์
media_filter
ซึ่งจะช่วยลดขนาดออบเจ็กต์ การตอบกลับได้มากกว่า 70%
พารามิเตอร์
ตารางต่อไปนี้แสดงรายละเอียดพารามิเตอร์สำหรับปลายทางการค้นหา
พารามิเตอร์ | |
---|---|
key |
จำเป็น
คีย์ API สำหรับการเข้าถึงที่มีสิทธิ์ ไม่มีค่าเริ่มต้น |
q |
จำเป็น
สตริงการค้นหา ไม่มีค่าเริ่มต้น |
client_key |
ขอแนะนำ
สตริงที่ไคลเอ็นต์ระบุซึ่งแสดงถึงการผสานรวม คีย์ไคลเอ็นต์ช่วยให้คุณใช้คีย์ API เดียวกันในการผสานรวมต่างๆ ได้ แต่ยังคงแยกความแตกต่างได้ สำหรับการผสานรวมแอป ให้ใช้ค่า พฤติกรรมที่กำหนดเองของไคลเอ็นต์จะทริกเกอร์โดยการจับคู่พารามิเตอร์ ไม่มีค่าเริ่มต้น |
searchfilter |
ไม่บังคับ
รายการประเภทเนื้อหาที่ไม่ใช่ GIF ที่คั่นด้วยคอมมาเพื่อกรอง
ออบเจ็กต์การตอบกลับ โดยค่าเริ่มต้น ไม่มีค่าเริ่มต้น ค่าที่ยอมรับคือ
|
country |
ขอแนะนำ
ระบุประเทศต้นทางของคำขอ โดยระบุรหัสประเทศ 2 ตัวอักษร ISO 3166-1 ค่าเริ่มต้นคือ |
locale |
ขอแนะนำ
ระบุภาษาเริ่มต้นเพื่อตีความสตริงการค้นหา คุณสามารถใช้รหัสประเทศที่ระบุใน ค่าเริ่มต้นคือ |
contentfilter |
ขอแนะนำ
ระบุระดับตัวกรองความปลอดภัยของเนื้อหา ค่าเริ่มต้นคือ |
media_filter |
ขอแนะนำ
รายการรูปแบบ GIF ที่คั่นด้วยคอมมาเพื่อกรอง
ออบเจ็กต์การตอบกลับ โดยค่าเริ่มต้น ตัวอย่าง: ไม่มีค่าเริ่มต้น |
ar_range |
ขอแนะนำ
กรอง ออบเจ็กต์การตอบกลับเพื่อให้มีเฉพาะ GIF ที่มีสัดส่วนภาพที่อยู่ใน ช่วงที่เลือก ค่าเริ่มต้นคือ
|
random |
ไม่บังคับ
ระบุว่าจะจัดลำดับคำตอบแบบสุ่มหรือไม่ ค่าเริ่มต้นคือ ค่าที่ยอมรับคือ |
limit |
ไม่บังคับ
ดึงข้อมูลผลลัพธ์สูงสุดตามจำนวนที่ระบุ ค่าเริ่มต้นคือ |
pos |
ไม่บังคับ
ดึงข้อมูลผลลัพธ์ที่เริ่มต้นที่ตำแหน่ง "value" ใช้ค่าที่ไม่ใช่ 0 และไม่ใช่ค่าว่างจาก
ไม่มีค่าเริ่มต้น |
รูปแบบการตอบกลับ
ตารางต่อไปนี้แสดงรายละเอียดเกี่ยวกับรูปแบบการตอบกลับสำหรับปลายทาง Search
คีย์ | |
---|---|
next |
ตัวระบุตำแหน่งที่จะใช้กับการค้นหา API ครั้งถัดไปผ่านฟิลด์ |
results |
อาร์เรย์ของ ออบเจ็กต์การตอบกลับที่มีเนื้อหาที่เกี่ยวข้องมากที่สุดสำหรับข้อความค้นหาที่ขอ ระบบจะจัดเรียงเนื้อหาตามอันดับความเกี่ยวข้อง |
ตัวอย่างคำขอ
Curl
/* search for excited top 8 GIFs */ curl "https://tenor.googleapis.com/v2/search?q=excited&key=API_KEY&client_key=my_test_app&limit=8"
Python
# set the apikey and limit apikey = "API_KEY" # click to set to your apikey lmt = 8 ckey = "my_test_app" # set the client_key for the integration and use the same value for all API calls # our test search search_term = "excited" # get the top 8 GIFs for the search term r = requests.get( "https://tenor.googleapis.com/v2/search?q=%s&key=%s&client_key=%s&limit=%s" % (search_term, apikey, ckey, lmt)) if r.status_code == 200: # load the GIFs using the urls for the smaller GIF sizes top_8gifs = json.loads(r.content) print(top_8gifs) else: top_8gifs = None
Android/Java
import android.app.Application; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; public class App extends Application { private static final String API_KEY = "API_KEY"; private static final String CLIENT_KEY = "my_test_app" private static final String LogTag = "TenorTest"; @Override public void onCreate() { super.onCreate(); new Thread() { @Override public void run() { final String searchTerm = "excited"; // make initial search request for the first 8 items JSONObject searchResult = getSearchResults(searchTerm, 8); // load the results for the user Log.v(LogTag, "Search Results: " + searchResult.toString()); } }.start(); } /** * Get Search Result GIFs */ public static JSONObject getSearchResults(String searchTerm, int limit) { // make search request - using default locale of EN_US final String url = String.format("https://tenor.googleapis.com/v2/search?q=%1$s&key=%2$s&client_key=%3$s&limit=%4$s", searchTerm, API_KEY, CLIENT_KEY, limit); try { return get(url); } catch (IOException | JSONException ignored) { } return null; } /** * Construct and run a GET request */ private static JSONObject get(String url) throws IOException, JSONException { HttpURLConnection connection = null; try { // Get request connection = (HttpURLConnection) new URL(url).openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("GET"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); // Handle failure int statusCode = connection.getResponseCode(); if (statusCode != HttpURLConnection.HTTP_OK && statusCode != HttpURLConnection.HTTP_CREATED) { String error = String.format("HTTP Code: '%1$s' from '%2$s'", statusCode, url); throw new ConnectException(error); } // Parse response return parser(connection); } catch (Exception ignored) { } finally { if (connection != null) { connection.disconnect(); } } return new JSONObject(""); } /** * Parse the response into JSONObject */ private static JSONObject parser(HttpURLConnection connection) throws JSONException { char[] buffer = new char[1024 * 4]; int n; InputStream stream = null; try { stream = new BufferedInputStream(connection.getInputStream()); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); StringWriter writer = new StringWriter(); while (-1 != (n = reader.read(buffer))) { writer.write(buffer, 0, n); } return new JSONObject(writer.toString()); } catch (IOException ignored) { } finally { if (stream != null) { try { stream.close(); } catch (IOException ignored) { } } } return new JSONObject(""); } }
Swift 2.0+/iOS
let apikey = "API_KEY" let clientkey = "my_test_app" func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { requestData() return true } /** Execute web request to retrieve the top GIFs returned (in batches of 8) for the given search term. */ func requestData() { // the test search term let searchTerm = "excited" // Define the results upper limit let limit = 8 // make initial search request for the first 8 items let searchRequest = URLRequest(url: URL(string: String(format: "https://tenor.googleapis.com/v2/search?q=%@&key=%@&client_key=%@&limit=%d", searchTerm, apikey, clientkey, limit))!) makeWebRequest(urlRequest: searchRequest, callback: tenorSearchHandler) // Data will be loaded by each request's callback } /** Async URL requesting function. */ func makeWebRequest(urlRequest: URLRequest, callback: @escaping ([String:AnyObject]) -> ()) { // Make the async request and pass the resulting JSON object to the callback let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in do { if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] { // Push the results to our callback callback(jsonResult) } } catch let error as NSError { print(error.localizedDescription) } } task.resume() } /** Web response handler for search requests. */ func tenorSearchHandler(response: [String:AnyObject]) { // Parse the JSON response let responseGifs = response["results"]! // Load the GIFs into your view print("Result GIFS: (responseGifs)") } }
JavaScript
<!DOCTYPE html> <html> <script> // url Async requesting function function httpGetAsync(theUrl, callback) { // create the request object var xmlHttp = new XMLHttpRequest(); // set the state change callback to capture when the response comes in xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { callback(xmlHttp.responseText); } } // open as a GET call, pass in the url and set async = True xmlHttp.open("GET", theUrl, true); // call send with no params as they were passed in on the url string xmlHttp.send(null); return; } // callback for the top 8 GIFs of search function tenorCallback_search(responsetext) { // Parse the JSON response var response_objects = JSON.parse(responsetext); top_10_gifs = response_objects["results"]; // load the GIFs -- for our example we will load the first GIFs preview size (nanogif) and share size (gif) document.getElementById("preview_gif").src = top_10_gifs[0]["media_formats"]["nanogif"]["url"]; document.getElementById("share_gif").src = top_10_gifs[0]["media_formats"]["gif"]["url"]; return; } // function to call the trending and category endpoints function grab_data() { // set the apikey and limit var apikey = "API_KEY"; var clientkey = "my_test_app"; var lmt = 8; // test search term var search_term = "excited"; // using default locale of en_US var search_url = "https://tenor.googleapis.com/v2/search?q=" + search_term + "&key=" + apikey +"&client_key=" + clientkey + "&limit=" + lmt; httpGetAsync(search_url,tenorCallback_search); // data will be loaded by each call's callback return; } // SUPPORT FUNCTIONS ABOVE // MAIN BELOW // start the flow grab_data(); </script> <body> <h2># 1 GIF loaded - preview image</h2> <img id="preview_gif" src="" alt="" style="width:220px;height:164px;"> <h2># 1 GIF loaded - share image</h2> <img id="share_gif" src="" alt="" style="width:498px;height:372px;"> </body> </html>
Objective-C
NSString *apiKey = @"API_KEY"; NSString *clientKey = @"my_test_app"; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self requestData]; return YES; } /** Execute web request to retrieve the top GIFs returned(in batches of 8) for the given search term. */ -(void)requestData { // Define the results upper limit int limit = 8; // the test search term NSString *searchQuery = @"excited"; // Get the top 10 trending GIFs (updated through out the day) - using the default locale of en_US NSString *UrlString = [NSString stringWithFormat:@"https://tenor.googleapis.com/v2/search?key=%@&client_key=%@&q=%@&limit=%d", apiKey, clientKey, searchQuery, limit]; NSURL *searchUrl = [NSURL URLWithString:UrlString]; NSURLRequest *searchRequest = [NSURLRequest requestWithURL:searchUrl]; [self makeWebRequest:searchRequest withCallback:tenorSearchResultsHandler]; // Data will be loaded by each request's callback } /** Async URL requesting function. */ -(void)makeWebRequest:(NSURLRequest *)urlRequest withCallback:(void (^)(NSDictionary *))callback { // Make the async request and pass the resulting JSON object to the callback NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NStopGifsError *jsonError = nil; NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&jsonError]; if(jsonError != nil) { NSLog(@"%@", jsonError.localizedDescription); return; } // Push the results to our callback callback(jsonResult); }]; [task resume]; } /** Web response handler for searches. */ void (^tenorSearchResultsHandler)(NSDictionary *) = ^void(NSDictionary *response) { // Parse the JSON response NSDictionary *topGifs = response[@"results"]; // Load the GIFs into your view NSLog(@"Search Results: %@", topGifs); };
แนะนำ
URL หลัก
https://tenor.googleapis.com/v2/featured?<parameters>
รับออบเจ็กต์ JSON ที่มีรายการ GIF ยอดนิยมทั่วโลกในปัจจุบัน Tenor อัปเดตสตรีมแนะนำเป็นประจำตลอดทั้งวัน
เมื่อรวมพารามิเตอร์ URL searchfilter=sticker
ไว้ในคำขอ
ปลายทางแนะนำของ Tenor จะแสดงสติกเกอร์แทน GIF ในคำตอบที่มีสติกเกอร์
ออบเจ็กต์คำตอบจะมีรูปแบบโปร่งใส
ในฟิลด์ media
แนวทางปฏิบัติแนะนำ
- หากต้องการแยกความแตกต่างของการผสานรวม ให้ระบุพารามิเตอร์
client_key
พร้อมกับkey
ของ API - เมื่อผู้ใช้ตัดสินใจเลือก GIF หรือสติกเกอร์ที่จะแชร์ เราขอแนะนำให้คุณใส่ คำกระตุ้นให้ดำเนินการที่สอดคล้องกันไปยังปลายทาง Register Share ด้วย การเรียกนี้เป็นตัวเลือกที่จะช่วยให้ AI ของเครื่องมือค้นหาของ Tenor ปรับแต่งผลการค้นหาได้
- หากต้องการควบคุมจำนวนและลำดับการแสดงผล GIF ให้ใช้พารามิเตอร์
limit
และpos
เช่น คุณอาจตั้งค่าlimit = 10
สำหรับ ผลการค้นหาคำขอที่กำลังมาแรงครั้งแรกของผู้ใช้ และโหลดตัวอย่าง GIF เหล่านั้นเพื่อให้ผู้ใช้เรียกดู หากผู้ใช้ขอผลการค้นหาเพิ่มเติม ให้รวบรวมผลการค้นหาอีก 10 รายการโดยการเรียก API เดียวกัน แต่ตั้งค่าpos
เป็นค่าของช่องnext
จากการตอบกลับครั้งแรก คุณ สามารถใช้รูปแบบนี้เพื่อสร้างประสบการณ์การโหลดแบบ Lazy Loading ที่ราบรื่น ซึ่งจะช่วยลดการใช้แบนด์วิดท์ และทำให้ผู้ใช้ได้รับเวลาในการตอบสนองที่เร็วขึ้น เนื่องจากระบบจะโหลดตัวอย่าง GIF แบบขนานที่ฝั่งไคลเอ็นต์น้อยลง - หากต้องการระบุการจัดประเภทความปลอดภัยของเนื้อหา GIF ที่เหมาะสมสำหรับบริการหรือแอปพลิเคชัน ให้ใช้พารามิเตอร์
ContentFilter
- หากต้องการลดจำนวนรูปแบบ GIF ที่แสดงผล ให้ใช้พารามิเตอร์
media_filter
ซึ่งจะช่วยลดขนาดออบเจ็กต์การตอบกลับได้ถึง 75%
พารามิเตอร์
ตารางต่อไปนี้แสดงรายละเอียดพารามิเตอร์สำหรับปลายทางที่แนะนำ
พารามิเตอร์ | |
---|---|
key |
จำเป็น
คีย์ API สำหรับการเข้าถึง API ที่มีสิทธิ์ ไม่มีค่าเริ่มต้น |
client_key |
ขอแนะนำ
สตริงที่ไคลเอ็นต์ระบุซึ่งแสดงถึงการผสานรวม คีย์ไคลเอ็นต์ช่วยให้คุณใช้คีย์ API เดียวกันในการผสานรวมต่างๆ ได้ แต่ยังคงแยกความแตกต่างได้ สำหรับการผสานรวมแอป ให้ใช้ค่า พฤติกรรมที่กำหนดเองของไคลเอ็นต์จะทริกเกอร์โดยการจับคู่พารามิเตอร์ ไม่มีค่าเริ่มต้น |
searchfilter |
ไม่บังคับ
รายการประเภทเนื้อหาที่ไม่ใช่ GIF ที่คั่นด้วยคอมมาเพื่อกรอง
ออบเจ็กต์การตอบกลับ โดยค่าเริ่มต้น ไม่มีค่าเริ่มต้น ค่าที่ยอมรับคือ
|
country |
ขอแนะนำ
ระบุประเทศต้นทางของคำขอ โดยระบุรหัสประเทศ 2 ตัวอักษร ISO 3166-1 ค่าเริ่มต้นคือ |
locale |
ขอแนะนำ
ระบุภาษาเริ่มต้นเพื่อตีความสตริงการค้นหา คุณสามารถใช้รหัสประเทศที่ระบุใน ค่าเริ่มต้นคือ |
media_filter |
ขอแนะนำ
รายการรูปแบบ GIF ที่คั่นด้วยคอมมาเพื่อกรอง
ออบเจ็กต์การตอบกลับ โดยค่าเริ่มต้น ตัวอย่าง: ไม่มีค่าเริ่มต้น |
ar_range |
ขอแนะนำ
กรอง ออบเจ็กต์การตอบกลับเพื่อให้มีเฉพาะ GIF ที่มีสัดส่วนภาพที่อยู่ใน ช่วงที่เลือก ค่าเริ่มต้นคือ
|
contentfilter |
ขอแนะนำ
ระบุระดับตัวกรองความปลอดภัยของเนื้อหา ค่าเริ่มต้นคือ |
limit |
ไม่บังคับ
ดึงข้อมูลผลลัพธ์สูงสุดตามจำนวนที่ระบุ ค่าเริ่มต้นคือ |
pos |
ไม่บังคับ
ดึงข้อมูลผลลัพธ์ที่เริ่มต้นที่ตำแหน่ง "value" ใช้ค่าที่ไม่ใช่ 0 และไม่ใช่ค่าว่างจาก
ไม่มีค่าเริ่มต้น |
รูปแบบการตอบกลับ
ตารางต่อไปนี้แสดงรายละเอียดเกี่ยวกับรูปแบบการตอบกลับสำหรับปลายทางที่แนะนำ
คีย์ | |
---|---|
next |
ตัวระบุตำแหน่งที่จะใช้กับการค้นหา API ครั้งถัดไปผ่านฟิลด์ |
results |
อาร์เรย์ของออบเจ็กต์ Response Featured |
ตัวอย่างคำขอ
Curl
/* Featured GIFs call */ curl "https://tenor.googleapis.com/v2/featured?key=API_KEY&client_key=my_test_app"
Python
import requests import json # set the apikey and limit apikey = "API_KEY" # click to set to your apikey ckey = "my_test_app" # set the client_key for the integration lmt = 10 # get the top 10 featured GIFs - using the default locale of en_US r = requests.get("https://tenor.googleapis.com/v2/featured?key=%s&client_key=%s&limit=%s" % (apikey, ckey, lmt)) if r.status_code == 200: featured_gifs = json.loads(r.content) else: featured_gifs = None # load the featured GIFs print (featured_gifs)
Android/Java
import android.app.Application; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; public class App extends Application { private static final String API_KEY = "API_KEY"; private static final String CLIENT_KEY = "my_test_app"; private static final String LogTag = "TenorTest"; @Override public void onCreate() { super.onCreate(); new Thread() { @Override public void run() { // get the top 10 featured GIFs JSONObject featuredGifs = getFeaturedGifs(10); // load the results for the user Log.v(LogTag, "Featured GIFS: " + featuredGifs.toString()); } }.start(); } /** * Get featured GIFs */ public static JSONObject getFeaturedGifs(int limit) { // get the Featured GIFS - using the default locale of en_US final String url = String.format("https://tenor.googleapis.com/v2/featured?key=%1$s&client_key=%2$s&limit=%3$s", API_KEY, CLIENT_KEY, limit); try { return get(url); } catch (IOException | JSONException ignored) { } return null; } /** * Construct and run a GET request */ private static JSONObject get(String url) throws IOException, JSONException { HttpURLConnection connection = null; try { // Get request connection = (HttpURLConnection) new URL(url).openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("GET"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); // Handle failure int statusCode = connection.getResponseCode(); if (statusCode != HttpURLConnection.HTTP_OK && statusCode != HttpURLConnection.HTTP_CREATED) { String error = String.format("HTTP Code: '%1$s' from '%2$s'", statusCode, url); throw new ConnectException(error); } // Parse response return parser(connection); } catch (Exception ignored) { } finally { if (connection != null) { connection.disconnect(); } } return new JSONObject(""); } /** * Parse the response into JSONObject */ private static JSONObject parser(HttpURLConnection connection) throws JSONException { char[] buffer = new char[1024 * 4]; int n; InputStream stream = null; try { stream = new BufferedInputStream(connection.getInputStream()); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); StringWriter writer = new StringWriter(); while (-1 != (n = reader.read(buffer))) { writer.write(buffer, 0, n); } return new JSONObject(writer.toString()); } catch (IOException ignored) { } finally { if (stream != null) { try { stream.close(); } catch (IOException ignored) { } } } return new JSONObject(""); } }
Swift 2.0+/iOS
let apikey = "API_KEY" let clientkey = "my_test_app" func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { requestData() return true } /** Execute web requests to retrieve featured GIFs */ func requestData() { // Define the results upper limit let limit = 10 // Get the top 10 featured GIFs (updated throughout the day) - using the default locale of en_US let featuredRequest = URLRequest(url: URL(string: String(format: "https://tenor.googleapis.com/v2/featured?key=%@&client_key=%@&limit=%d", apikey, clientkey, limit))!) makeWebRequest(urlRequest: featuredRequest, callback: tenorFeaturedResultsHandler) // Data will be loaded by the request's callback } /** Async URL requesting function. */ func makeWebRequest(urlRequest: URLRequest, callback: @escaping ([String:AnyObject]) -> ()) { // Make the async request and pass the resulting JSON object to the callback let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in do { if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] { // Push the results to our callback callback(jsonResult) } } catch let error as NSError { print(error.localizedDescription) } } task.resume() } /** Web response handler for featured top 10 GIFs. */ func tenorFeaturedResultsHandler(response: [String:AnyObject]) { // Parse the JSON response let topTenGifs = response["results"]! // Load the GIFs into your view print("Featured Results: (topTenGifs)") } }
JavaScript
<!DOCTYPE html> <html> <script> // url Async requesting function function httpGetAsync(theUrl, callback) { // create the request object var xmlHttp = new XMLHttpRequest(); // set the state change callback to capture when the response comes in xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { callback(xmlHttp.responseText); } } // open as a GET call, pass in the url and set async = True xmlHttp.open("GET", theUrl, true); // call send with no params as they were passed in on the url string xmlHttp.send(null); return; } // callback for featured top 10 GIFs function tenorCallback_featured(responsetext) { // Parse the JSON response var response_objects = JSON.parse(responsetext); top_10_gifs = response_objects["results"]; // load the GIFs -- for our example we will load the first GIFs preview size (nanogif) and share size (gif) document.getElementById("preview_gif").src = top_10_gifs[0]["media_formats"]["nanogif"]["url"]; document.getElementById("share_gif").src = top_10_gifs[0]["media_formats"]["gif"]["url"]; return; } // function to call the featured endpoint function grab_data() { // set the apikey and limit var apikey = "API_KEY"; var clientkey = "my_test_app"; var lmt = 10; // get the top 10 featured GIFs (updated throughout the day) - using the default locale of en_US var featured_url = "https://tenor.googleapis.com/v2/featured?key=" + apikey + "&client_key=" + clientkey + "&limit=" + lmt; httpGetAsync(featured_url,tenorCallback_featured); // data will be loaded by each call's callback return; } // SUPPORT FUNCTIONS ABOVE // MAIN BELOW // start the flow grab_data(); </script> <style> .container { position: relative; text-align: center; color: white; } .title { text-align: center; } .centered { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } </style> <body> <h2 class="title">GIF loaded - preview image</h2> <div class="container"> <img id="preview_gif" src="" alt="" style=""> </div> <h2 class="title">GIF loaded - share image</h2> <div class="container"> <img id="share_gif" src="" alt="" style=""> </div> </body> </html>
Objective-C
NSString *apiKey = @"API_KEY"; NSString *clientKey = @"my_test_app"; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self requestData]; return YES; } /** Execute web requests to retrieve featured GIFs */ -(void)requestData { // Define the results upper limit int limit = 10; // Get the top 10 featured GIFs (updated throughout the day) - using the default locale of en_US NSString *featuredUrlString = [NSString stringWithFormat:@"https://tenor.googleapis.com/v2/featured?key=%@&client_key=%@&limit=%d", apiKey, clientKey, limit]; NSURL *featuredUrl = [NSURL URLWithString:featuredUrlString]; NSURLRequest *featuredRequest = [NSURLRequest requestWithURL:featuredUrl]; [self makeWebRequest:featuredRequest withCallback:tenorFeaturedResultsHandler]; // Data will be loaded by each request's callback } /** Async URL requesting function. */ -(void)makeWebRequest:(NSURLRequest *)urlRequest withCallback:(void (^)(NSDictionary *))callback { // Make the async request and pass the resulting JSON object to the callback NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSError *jsonError = nil; NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&jsonError]; if(jsonError != nil) { NSLog(@"%@", jsonError.localizedDescription); return; } // Push the results to our callback callback(jsonResult); }]; [task resume]; } /** Web response handler for featured top 10 GIFs. */ void (^tenorFeaturedResultsHandler)(NSDictionary *) = ^void(NSDictionary *response) { // Parse the JSON response NSDictionary *topTenGifs = response[@"results"]; // Load the GIFs into your view NSLog(@"Featured Results: %@", topTenGifs); };
หมวดหมู่
URL หลัก
https://tenor.googleapis.com/v2/categories?<parameters>
รับออบเจ็กต์ JSON ที่มีรายการหมวดหมู่ GIF ที่เชื่อมโยงกับประเภทที่ระบุ แต่ละหมวดหมู่ จะมี URL การค้นหาที่เกี่ยวข้องให้ใช้หากผู้ใช้คลิกหมวดหมู่ URL ของการค้นหา มีพารามิเตอร์จากการเรียกไปยังปลายทางหมวดหมู่เดิม
ประเภทที่รองรับ
featured
(ค่าเริ่มต้น): หมวดหมู่ GIF ที่แนะนำในปัจจุบันซึ่งอิงตามอารมณ์หรือรีแอ็กชัน ซึ่งรวมถึง GIF ตัวอย่างสำหรับแต่ละคำtrending
: ข้อความค้นหาที่มาแรงในปัจจุบัน ซึ่งรวมถึง GIF ตัวอย่างสำหรับแต่ละ คำ
แนวทางปฏิบัติแนะนำ
- หากต้องการแยกความแตกต่างของการผสานรวม ให้ระบุพารามิเตอร์
client_key
พร้อมกับkey
ของ API - ใช้พารามิเตอร์
locale
เพื่อแปลงชื่อหมวดหมู่เป็นภาษาของผู้ใช้ ค่าเริ่มต้นคือen_US
- หากต้องการระบุการจัดประเภทความปลอดภัยของเนื้อหา GIF ที่เหมาะสมสำหรับบริการหรือแอปพลิเคชัน ให้ใช้พารามิเตอร์
ContentFilter
เมื่อใช้ พารามิเตอร์ContentFilter
จะส่งผ่านไปยัง URL การค้นหาทั้งหมดที่พบ ในcategories
ออบเจ็กต์การตอบกลับ
พารามิเตอร์
ตารางต่อไปนี้แสดงรายละเอียดเกี่ยวกับพารามิเตอร์ของปลายทางหมวดหมู่
พารามิเตอร์ | |
---|---|
key |
จำเป็น
คีย์ API สำหรับการเข้าถึง API ที่มีสิทธิ์ ไม่มีค่าเริ่มต้น |
client_key |
ขอแนะนำ
สตริงที่ไคลเอ็นต์ระบุซึ่งแสดงถึงการผสานรวม คีย์ไคลเอ็นต์ช่วยให้คุณใช้คีย์ API เดียวกันในการผสานรวมต่างๆ ได้ แต่ยังคงแยกความแตกต่างได้ สำหรับการผสานรวมแอป ให้ใช้ค่า พฤติกรรมที่กำหนดเองของไคลเอ็นต์จะทริกเกอร์โดยการจับคู่พารามิเตอร์ ไม่มีค่าเริ่มต้น |
country |
ขอแนะนำ
ระบุประเทศต้นทางของคำขอ โดยระบุรหัสประเทศ 2 ตัวอักษร ISO 3166-1 ค่าเริ่มต้นคือ |
locale |
ขอแนะนำ
ระบุภาษาเริ่มต้นเพื่อตีความสตริงการค้นหา คุณสามารถใช้รหัสประเทศที่ระบุใน ค่าเริ่มต้นคือ |
type |
ขอแนะนำ
กำหนดประเภทหมวดหมู่ที่แสดง ค่าเริ่มต้นคือ |
contentfilter |
ขอแนะนำ
ระบุระดับตัวกรองความปลอดภัยของเนื้อหา ค่าเริ่มต้นคือ |
รูปแบบการตอบกลับ
ตารางต่อไปนี้แสดงรายละเอียดเกี่ยวกับรูปแบบการตอบกลับสำหรับปลายทางหมวดหมู่
คีย์ | |
---|---|
tags |
อาร์เรย์ของ
|
ตัวอย่างคำขอ
Curl
/* categories call */ curl "https://tenor.googleapis.com/v2/categories?key=API_KEY&client_key=my_test_app"
Python
import requests import json # set the apikey and limit apikey = "API_KEY" # click to set to your apikey ckey = "my_test_app" # set the client_key for the integration # get the current list of categories - using the default locale of en_US r = requests.get("https://tenor.googleapis.com/v2/categories?key=%s&client_key=%s" % (apikey, ckey)) if r.status_code == 200: categories = json.loads(r.content) else: categories = None # load the categories below the search bar for the user print (categories)
Android/Java
import android.app.Application; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; public class App extends Application { private static final String API_KEY = "API_KEY"; private static final String CLIENT_KEY = "my_test_app"; private static final String LogTag = "TenorTest"; @Override public void onCreate() { super.onCreate(); new Thread() { @Override public void run() { // get the current list of categories JSONObject categories = getCategories(); // load the results for the user Log.v(LogTag, "GIF Categories: " + categories.toString()); } }.start(); } /** * Get categories */ public static JSONObject getCategories() { // get the categories - using the default locale of en_US final String url = String.format("https://tenor.googleapis.com/v2/categories?key=%1$s&client_key=%2$s", API_KEY, CLIENT_KEY); try { return get(url); } catch (IOException | JSONException ignored) { } return null; } /** * Construct and run a GET request */ private static JSONObject get(String url) throws IOException, JSONException { HttpURLConnection connection = null; try { // Get request connection = (HttpURLConnection) new URL(url).openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("GET"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); // Handle failure int statusCode = connection.getResponseCode(); if (statusCode != HttpURLConnection.HTTP_OK && statusCode != HttpURLConnection.HTTP_CREATED) { String error = String.format("HTTP Code: '%1$s' from '%2$s'", statusCode, url); throw new ConnectException(error); } // Parse response return parser(connection); } catch (Exception ignored) { } finally { if (connection != null) { connection.disconnect(); } } return new JSONObject(""); } /** * Parse the response into JSONObject */ private static JSONObject parser(HttpURLConnection connection) throws JSONException { char[] buffer = new char[1024 * 4]; int n; InputStream stream = null; try { stream = new BufferedInputStream(connection.getInputStream()); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); StringWriter writer = new StringWriter(); while (-1 != (n = reader.read(buffer))) { writer.write(buffer, 0, n); } return new JSONObject(writer.toString()); } catch (IOException ignored) { } finally { if (stream != null) { try { stream.close(); } catch (IOException ignored) { } } } return new JSONObject(""); } }
Swift 2.0+/iOS
let apikey = "API_KEY" let clientkey = "my_test_app" func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { requestData() return true } /** Execute web requests to retrieve featured GIFs and GIF categories. */ func requestData() { // Get the current list of categories - using the default locale of en_US let categoryRequest = URLRequest(url: URL(string: String(format: "https://tenor.googleapis.com/v2/categories?key=%@&client_key=%@", apikey, clientkey))!) makeWebRequest(urlRequest: categoryRequest, callback: tenorCategoryResultsHandler) // Data will be loaded by each request's callback } /** Async URL requesting function. */ func makeWebRequest(urlRequest: URLRequest, callback: @escaping ([String:AnyObject]) -> ()) { // Make the async request and pass the resulting JSON object to the callback let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in do { if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] { // Push the results to our callback callback(jsonResult) } } catch let error as NSError { print(error.localizedDescription) } } task.resume() } /** Web response handler for GIF categories. */ func tenorCategoryResultsHandler(response: [String:AnyObject]) { // Parse the JSON response let categories = response["tags"]! // Load the categories into your view print("Category Results: (categories)") } }
JavaScript
<!DOCTYPE html> <html> <script> // url Async requesting function function httpGetAsync(theUrl, callback) { // create the request object var xmlHttp = new XMLHttpRequest(); // set the state change callback to capture when the response comes in xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { callback(xmlHttp.responseText); } } // open as a GET call, pass in the url and set async = True xmlHttp.open("GET", theUrl, true); // call send with no params as they were passed in on the url string xmlHttp.send(null); return; } // callback for GIF categories function tenorCallback_categories(responsetext) { // Parse the JSON response var response_objects = JSON.parse(responsetext); categories = response_objects["tags"]; // load the categories - example is for the first category // url to load: var imgurl = categories[0]["image"]; // text to overlay on image: var txt_overlay = categories[0]["name"]; // search to run if user clicks the category var category_search_path = categories[0]["path"]; document.getElementById("category_gif").src = imgurl document.getElementById("catgif_caption").innerHTML = txt_overlay document.getElementById("cat_link").href = category_search_path return; } // function to call the category endpoints function grab_data() { // set the apikey and limit var apikey = "API_KEY"; var clientkey = "my_test_app"; // get the current list of categories - using the default locale of en_US var cat_url = "https://tenor.googleapis.com/v2/categories?key=" + apikey + "&client_key=" + clientkey; httpGetAsync(cat_url,tenorCallback_categories); // data will be loaded by each call's callback return; } // SUPPORT FUNCTIONS ABOVE // MAIN BELOW // start the flow grab_data(); </script> <style> .container { position: relative; text-align: center; color: white; } .title { text-align: center; } .centered { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } </style> <body> <h2 class="title">GIF Category</h2> <div class="container"> <a id="cat_link" href=""> <img id="category_gif" src="" alt="" style=""> <div id="catgif_caption" class="centered"></div> </a> </div> </body> </html>
Objective-C
NSString *apiKey = @"API_KEY"; NSString *clientKey = @"my_test_app"; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self requestData]; return YES; } /** Execute web requests to retrieve GIF categories. */ -(void)requestData { // Get the current list of categories - using the default locale of en_US NSString *categoryUrlString = [NSString stringWithFormat:@"https://tenor.googleapis.com/v2/categories?key=%@&client_key=%@", apiKey, clientKey]; NSURL *categoryUrl = [NSURL URLWithString:categoryUrlString]; NSURLRequest *categoryRequest = [NSURLRequest requestWithURL:categoryUrl]; [self makeWebRequest:categoryRequest withCallback:tenorCategoryResultsHandler]; // Data will be loaded by each request's callback } /** Async URL requesting function. */ -(void)makeWebRequest:(NSURLRequest *)urlRequest withCallback:(void (^)(NSDictionary *))callback { // Make the async request and pass the resulting JSON object to the callback NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSError *jsonError = nil; NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&jsonError]; if(jsonError != nil) { NSLog(@"%@", jsonError.localizedDescription); return; } // Push the results to our callback callback(jsonResult); }]; [task resume]; } /** Web response handler for GIF categories. */ void (^tenorCategoryResultsHandler)(NSDictionary *) = ^void(NSDictionary *response) { // Parse the JSON response NSDictionary *categories = response[@"tags"]; // Load the categories into your view NSLog(@"Category Results: %@", categories); };
การแนะนำการค้นหา
URL หลัก
https://tenor.googleapis.com/v2/search_suggestions?<parameters>
รับออบเจ็กต์ JSON ที่มีรายการคำค้นหาอื่นสำหรับคำค้นหาที่ระบุ
คำแนะนำในการค้นหาจะช่วยให้ผู้ใช้จำกัดการค้นหาหรือค้นพบข้อความค้นหาที่เกี่ยวข้องเพื่อค้นหา GIF ที่แม่นยำยิ่งขึ้น API จะแสดงผลลัพธ์ตามลำดับของสิ่งที่น่าจะกระตุ้นการแชร์สำหรับคำที่กำหนดมากที่สุด โดยอิงตามพฤติกรรมการค้นหาและการแชร์ของผู้ใช้ในอดีต
แนวทางปฏิบัติแนะนำ
- หากต้องการแยกความแตกต่างของการผสานรวม ให้ระบุพารามิเตอร์
client_key
พร้อมกับkey
ของ API - แสดงผลลัพธ์ตามลำดับที่การตอบกลับระบุ
พารามิเตอร์
ตารางต่อไปนี้แสดงรายละเอียดพารามิเตอร์สำหรับปลายทางคำแนะนำในการค้นหา
พารามิเตอร์ | |
---|---|
key |
จำเป็น
คีย์ API สำหรับการเข้าถึง API ที่มีสิทธิ์ ไม่มีค่าเริ่มต้น |
q |
จำเป็น
สตริงการค้นหา ไม่มีค่าเริ่มต้น |
client_key |
ขอแนะนำ
สตริงที่ไคลเอ็นต์ระบุซึ่งแสดงถึงการผสานรวม คีย์ไคลเอ็นต์ช่วยให้คุณใช้คีย์ API เดียวกันในการผสานรวมต่างๆ ได้ แต่ยังคงแยกความแตกต่างได้ สำหรับการผสานรวมแอป ให้ใช้ค่า พฤติกรรมที่กำหนดเองของไคลเอ็นต์จะทริกเกอร์โดยการจับคู่พารามิเตอร์ ไม่มีค่าเริ่มต้น |
country |
ขอแนะนำ
ระบุประเทศต้นทางของคำขอ โดยระบุรหัสประเทศ 2 ตัวอักษร ISO 3166-1 ค่าเริ่มต้นคือ |
locale |
ขอแนะนำ
ระบุภาษาเริ่มต้นเพื่อตีความสตริงการค้นหา คุณสามารถใช้รหัสประเทศที่ระบุใน ค่าเริ่มต้นคือ |
limit |
ไม่บังคับ
ดึงข้อมูลผลลัพธ์สูงสุดตามจำนวนที่ระบุ ค่าเริ่มต้นคือ |
รูปแบบการตอบกลับ
ตารางต่อไปนี้แสดงรายละเอียดเกี่ยวกับรูปแบบการตอบกลับสำหรับปลายทางคำแนะนำในการค้นหา
คีย์ | |
---|---|
results |
อาร์เรย์ของข้อความค้นหาที่แนะนำ |
ตัวอย่างคำขอ
Curl
/* search suggestion */ curl "https://tenor.googleapis.com/v2/search_suggestions?key=API_KEY&client_key=my_test_app&q=smile&limit=5"
Python
# set the apikey and limit the # coming back apikey = "API_KEY" # click to set to your apikey ckey = "my_test_app" # set the client_key for the integration lmt = 5 # partial search search = "smile" r = requests.get( "https://tenor.googleapis.com/v2/search_suggestions?key=%s&client_key=%s&q=%s&limit=%s" % (apikey, ckey, search, lmt)) if r.status_code == 200: # return the search suggestions search_suggestion_list = json.loads(r.content)["results"] print search_suggestion_list else: # handle a possible error search_suggestion_list = []
Android/Java
import android.app.Application; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; public class App extends Application { private static final String API_KEY = "API_KEY"; private static final String CLIENT_KEY = "my_test_app"; private static final String LogTag = "TenorTest"; @Override public void onCreate() { super.onCreate(); new Thread() { @Override public void run() { // for testing, the last search final String lastSearch = "smile"; int limit = 5; // make the search suggestion call JSONObject searchSuggestionResult = searchSuggestionRequest(lastSearch, limit); // load the results for the user Log.v(LogTag, "Search Suggestion Results: " + searchSuggestionResult.toString()); } }.start(); } /** * Autocomplete Request */ public static JSONObject searchSuggestionRequest(String lastSearch, int limit) { // make an autocomplete request - using default locale of EN_US final String url = String.format("https://tenor.googleapis.com/v2/search_suggestions?key=%1$s&client_key=%2$s&q=%3$s&limit=%4$s", API_KEY, CLIENT_KEY, lastSearch, limit); try { return get(url); } catch (IOException | JSONException ignored) { } return null; } /** * Construct and run a GET request */ private static JSONObject get(String url) throws IOException, JSONException { HttpURLConnection connection = null; try { // Get request connection = (HttpURLConnection) new URL(url).openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("GET"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); // Handle failure int statusCode = connection.getResponseCode(); if (statusCode != HttpURLConnection.HTTP_OK && statusCode != HttpURLConnection.HTTP_CREATED) { String error = String.format("HTTP Code: '%1$s' from '%2$s'", statusCode, url); throw new ConnectException(error); } // Parse response return parser(connection); } catch (Exception ignored) { } finally { if (connection != null) { connection.disconnect(); } } return new JSONObject(""); } /** * Parse the response into JSONObject */ private static JSONObject parser(HttpURLConnection connection) throws JSONException { char[] buffer = new char[1024 * 4]; int n; InputStream stream = null; try { stream = new BufferedInputStream(connection.getInputStream()); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); StringWriter writer = new StringWriter(); while (-1 != (n = reader.read(buffer))) { writer.write(buffer, 0, n); } return new JSONObject(writer.toString()); } catch (IOException ignored) { } finally { if (stream != null) { try { stream.close(); } catch (IOException ignored) { } } } return new JSONObject(""); } }
Swift 2.0+/iOS
let apikey = "API_KEY" let clientkey = "my_test_app" func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { requestData() return true } /** Execute web requests to get search suggestions. */ func requestData() { // for testing, the partial search let lastsearch = "smile" let limit = 5 // Get the top 5 search suggestions - using the default locale of en_US let suggestRequest = URLRequest(url: URL(string: String(format: "https://tenor.googleapis.com/v2/search_suggestions?key=%@&client_key=%@&q=%@&limit=%d", apikey, clientkey, lastsearch, limit))!) makeWebRequest(urlRequest: suggestRequest, callback: tenorSuggestResultsHandler) // Data will be loaded by each request's callback } /** Async URL requesting function. */ func makeWebRequest(urlRequest: URLRequest, callback: @escaping ([String:AnyObject]) -> ()) { // Make the async request and pass the resulting JSON object to the callback let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in do { if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] { // Push the results to our callback callback(jsonResult) } } catch let error as NSError { print(error.localizedDescription) } } task.resume() } /** Web response handler for search suggestion requests. */ func tenorSuggestResultsHandler(response: [String:AnyObject]) { // Parse the JSON response let searchSuggestion = response["results"]! // Load the GIFs into your view print("Search Suggestion Results: (searchSuggestion)") } }
JavaScript
<!DOCTYPE html> <html> <script> // url Async requesting function function httpGetAsync(theUrl, callback) { // create the request object var xmlHttp = new XMLHttpRequest(); // set the state change callback to capture when the response comes in xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { callback(xmlHttp.responseText); } } // open as a GET call, pass in the url and set async = True xmlHttp.open("GET", theUrl, true); // call send with no params as they were passed in on the url string xmlHttp.send(null); return; } // callback for share event function tenorCallback_searchSuggestion(responsetext) { var response_objects = JSON.parse(responsetext); predicted_words = response_objects["results"]; document.getElementById("ac_1").innerHTML = predicted_words[0]; document.getElementById("ac_2").innerHTML = predicted_words[1]; document.getElementById("ac_3").innerHTML = predicted_words[2]; document.getElementById("ac_4").innerHTML = predicted_words[3]; } // SUPPORT FUNCTIONS ABOVE // MAIN BELOW //search term psearch_term = "smile"; // set the apikey and limit var apikey = "API_KEY"; var clientkey = "my_test_app"; var lmt = 5; // using default locale of en_US var autoc_url = "https://tenor.googleapis.com/v2/search_suggestions?key=" + apikey + "&client_key=" + clientkey + "&q=" + psearch_term + "&limit=" + lmt; // send search suggestion request httpGetAsync(autoc_url,tenorCallback_searchSuggestion); </script> <body> <h2>Search Suggestion for "smile":</h2> <h3 id = "ac_1"></h3> <h3 id = "ac_2"></h3> <h3 id = "ac_3"></h3> <h3 id = "ac_4"></h3> </body> </html>
Objective-C
NSString *apiKey = @"API_KEY"; NSString *clientKey = @"my_test_app"; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self requestData]; return YES; } /** Execute web requests to get search suggestions. */ -(void)requestData { // Define the results upper limit int limit = 5; // the test search term NSString *lastSearch = @"smile"; // Get the search suggestions for the given last search - using the default locale of en_US NSString *UrlString = [NSString stringWithFormat:@"https://tenor.googleapis.com/v2/search_suggestions?key=%@&client_key=%@&q=%@&limit=%d", apiKey, clientKey, lastSearch, limit]; NSURL *searchUrl = [NSURL URLWithString:UrlString]; NSURLRequest *searchRequest = [NSURLRequest requestWithURL:searchUrl]; [self makeWebRequest:searchRequest withCallback:tenorSearchSuggestionResultsHandler]; // Data will be loaded by each request's callback } /** Async URL requesting function. */ -(void)makeWebRequest:(NSURLRequest *)urlRequest withCallback:(void (^)(NSDictionary *))callback { // Make the async request and pass the resulting JSON object to the callback NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NStopGifsError *jsonError = nil; NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&jsonError]; if(jsonError != nil) { NSLog(@"%@", jsonError.localizedDescription); return; } // Push the results to our callback callback(jsonResult); }]; [task resume]; } /** Web response handler for search suggestions */ void (^tenorSearchSuggestionResultsHandler)(NSDictionary *) = ^void(NSDictionary *response) { // Parse the JSON response NSDictionary *results = response[@"results"]; // Load the GIFs into your view NSLog(@"Search Suggestion Result: %@", results); };
เติมข้อความอัตโนมัติ
URL หลัก
https://tenor.googleapis.com/v2/autocomplete?q=<term>&key=<API KEY>
รับออบเจ็กต์ JSON ที่มีรายการข้อความค้นหาที่เสร็จสมบูรณ์สำหรับข้อความค้นหาบางส่วนที่ระบุ โดย AI ของ Tenor จะจัดเรียงรายการ และจำนวนผลลัพธ์จะลดลงเมื่อ AI ของ Tenor มีความแน่นอนมากขึ้น
แนวทางปฏิบัติแนะนำ
- หากต้องการแยกความแตกต่างของการผสานรวม ให้ระบุพารามิเตอร์
client_key
พร้อมกับkey
ของ API - ใช้พารามิเตอร์
locale
เพื่อปรับผลลัพธ์ให้เป็นภาษาของผู้ใช้ ค่าเริ่มต้นคือen_US
- แสดงผลลัพธ์ตามลำดับที่การตอบกลับระบุ
พารามิเตอร์
ตารางต่อไปนี้แสดงรายละเอียดพารามิเตอร์สำหรับปลายทางการเติมข้อความอัตโนมัติ
พารามิเตอร์ | |
---|---|
key |
จำเป็น
คีย์ API สำหรับการเข้าถึง API ที่มีสิทธิ์ ไม่มีค่าเริ่มต้น |
q |
จำเป็น
สตริงการค้นหา ไม่มีค่าเริ่มต้น |
client_key |
ขอแนะนำ
สตริงที่ไคลเอ็นต์ระบุซึ่งแสดงถึงการผสานรวม คีย์ไคลเอ็นต์ช่วยให้คุณใช้คีย์ API เดียวกันในการผสานรวมต่างๆ ได้ แต่ยังคงแยกความแตกต่างได้ สำหรับการผสานรวมแอป ให้ใช้ค่า พฤติกรรมที่กำหนดเองของไคลเอ็นต์จะทริกเกอร์โดยการจับคู่พารามิเตอร์ ไม่มีค่าเริ่มต้น |
country |
ขอแนะนำ
ระบุประเทศต้นทางของคำขอ โดยระบุรหัสประเทศ 2 ตัวอักษร ISO 3166-1 ค่าเริ่มต้นคือ |
locale |
ขอแนะนำ
ระบุภาษาเริ่มต้นเพื่อตีความสตริงการค้นหา คุณสามารถใช้รหัสประเทศที่ระบุใน ค่าเริ่มต้นคือ |
limit |
ไม่บังคับ
ดึงข้อมูลผลลัพธ์สูงสุดตามจำนวนที่ระบุ ค่าเริ่มต้นคือ |
รูปแบบการตอบกลับ
ตารางต่อไปนี้แสดงรายละเอียดเกี่ยวกับรูปแบบการตอบกลับสำหรับปลายทางการเติมข้อความอัตโนมัติ
คีย์ | |
---|---|
results |
อาร์เรย์ของข้อความค้นหาที่แนะนำ |
ตัวอย่างคำขอ
Curl
/* autocomplete */ curl "https://tenor.googleapis.com/v2/autocomplete?key=API_KEY&client_key=my_test_app&q=exc"
Python
apikey = "API_KEY" # click to set to your apikey ckey = "my_test_app" # set the client_key for the integration lmt = 5 # partial search psearch = "exc" r = requests.get( "https://tenor.googleapis.com/v2/autocomplete?key=%s&client_key=%s&q=%s&limit=%s" % (apikey, ckey, psearch, lmt)) if r.status_code == 200: # return the search predictions search_term_list = json.loads(r.content)["results"] print(search_term_list) else: # handle a possible error search_term_list = []
Android/Java
import android.app.Application; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; public class App extends Application { private static final String API_KEY = "API_KEY"; private static final String CLIENT_KEY = "my_test_app"; private static final String LogTag = "TenorTest"; @Override public void onCreate() { super.onCreate(); new Thread() { @Override public void run() { // for testing, the partial search final String partialSearch = "exc"; int limit = 5; // make the autocomplete call JSONObject autoCompleteResult = autoCompleteRequest(partialSearch, limit); // load the results for the user Log.v(LogTag, "AutoComplete Results: " + autoCompleteResult.toString()); } }.start(); } /** * Autocomplete Request */ public static JSONObject autoCompleteRequest(String partialSearch, int limit) { // make an autocomplete request - using default locale of EN_US final String url = String.format("https://tenor.googleapis.com/v2/autocomplete?key=%1$s&client_key=%2$s&q=%3$s&limit=%4$s", API_KEY, CLIENT_KEY, partialSearch, limit); try { return get(url); } catch (IOException | JSONException ignored) { } return null; } /** * Construct and run a GET request */ private static JSONObject get(String url) throws IOException, JSONException { HttpURLConnection connection = null; try { // Get request connection = (HttpURLConnection) new URL(url).openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("GET"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); // Handle failure int statusCode = connection.getResponseCode(); if (statusCode != HttpURLConnection.HTTP_OK && statusCode != HttpURLConnection.HTTP_CREATED) { String error = String.format("HTTP Code: '%1$s' from '%2$s'", statusCode, url); throw new ConnectException(error); } // Parse response return parser(connection); } catch (Exception ignored) { } finally { if (connection != null) { connection.disconnect(); } } return new JSONObject(""); } /** * Parse the response into JSONObject */ private static JSONObject parser(HttpURLConnection connection) throws JSONException { char[] buffer = new char[1024 * 4]; int n; InputStream stream = null; try { stream = new BufferedInputStream(connection.getInputStream()); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); StringWriter writer = new StringWriter(); while (-1 != (n = reader.read(buffer))) { writer.write(buffer, 0, n); } return new JSONObject(writer.toString()); } catch (IOException ignored) { } finally { if (stream != null) { try { stream.close(); } catch (IOException ignored) { } } } return new JSONObject(""); } }
Swift 2.0+/iOS
let apikey = "API_KEY" let clientkey = "my_test_app" func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { requestData() return true } /** Execute web requests to get autocomplete suggestions. */ func requestData() { // for testing, the partial search let partialSearch = "exc" let limit = 5 // Get up to 5 results from the autocomplete suggestions - using the default locale of en_US let autoRequest = URLRequest(url: URL(string: String(format: "https://tenor.googleapis.com/v2/autocomplete?key=%@&client_key=%@&q=%@&limit=%d", apikey, clientkey, partialSearch, limit))!) makeWebRequest(urlRequest: autoRequest, callback: tenorAutoCompleteResultsHandler) // Data will be loaded by each request's callback } /** Async URL requesting function. */ func makeWebRequest(urlRequest: URLRequest, callback: @escaping ([String:AnyObject]) -> ()) { // Make the async request and pass the resulting JSON object to the callback let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in do { if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] { // Push the results to our callback callback(jsonResult) } } catch let error as NSError { print(error.localizedDescription) } } task.resume() } /** Web response handler for autocomplete requests. */ func tenorAutoCompleteResultsHandler(response: [String:AnyObject]) { // Parse the JSON response let autoSuggestions = response["results"]! // Load the GIFs into your view print("Autocomplete Results: (autoSuggestions)") } }
JavaScript
<!DOCTYPE html> <html> <script> // url Async requesting function function httpGetAsync(theUrl, callback) { // create the request object var xmlHttp = new XMLHttpRequest(); // set the state change callback to capture when the response comes in xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { callback(xmlHttp.responseText); } } // open as a GET call, pass in the url and set async = True xmlHttp.open("GET", theUrl, true); // call send with no params as they were passed in on the url string xmlHttp.send(null); return; } // callback for share event function tenorCallback_autocomplete(responsetext) { var response_objects = JSON.parse(responsetext); predicted_words = response_objects["results"]; document.getElementById("ac_1").innerHTML = predicted_words[0]; document.getElementById("ac_2").innerHTML = predicted_words[1]; } // SUPPORT FUNCTIONS ABOVE // MAIN BELOW //partial search term psearch_term = "exc"; // set the apikey and limit var apikey = "API_KEY"; var clientkey = "my_test_app"; var lmt = 5; // using default locale of en_US var autoc_url = "https://tenor.googleapis.com/v2/autocomplete?key=" + apikey + "&client_key=" + clientkey + "&q=" + psearch_term + "&limit=" + lmt; // send autocomplete request httpGetAsync(autoc_url,tenorCallback_autocomplete); </script> <body> <h2>Partial Search "exc":</h2> <h3 id = "ac_1"></h3> <h3 id = "ac_2"></h3> </body> </html>
Objective-C
NSString *apiKey = @"API_KEY"; NSString *clientKey = @"my_test_app"; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self requestData]; return YES; } /** Execute web requests to get autocomplete suggestions. */ -(void)requestData { // Define the results upper limit int limit = 8; // the test search term NSString *partialSearch = @"exc"; // Get the auto complete predictions for the given partial search - using the default locale of en_US NSString *UrlString = [NSString stringWithFormat:@"https://tenor.googleapis.com/v2/autocomplete?key=%@&client_key=%@&q=%@&limit=%d", apiKey, clientKey, partialSearch, limit]; NSURL *searchUrl = [NSURL URLWithString:UrlString]; NSURLRequest *searchRequest = [NSURLRequest requestWithURL:searchUrl]; [self makeWebRequest:searchRequest withCallback:tenorAutoCompleteResultsHandler]; // Data will be loaded by each request's callback } /** Async URL requesting function. */ -(void)makeWebRequest:(NSURLRequest *)urlRequest withCallback:(void (^)(NSDictionary *))callback { // Make the async request and pass the resulting JSON object to the callback NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NStopGifsError *jsonError = nil; NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&jsonError]; if(jsonError != nil) { NSLog(@"%@", jsonError.localizedDescription); return; } // Push the results to our callback callback(jsonResult); }]; [task resume]; } /** Web response handler for auto complete predictions */ void (^tenorAutoCompleteResultsHandler)(NSDictionary *) = ^void(NSDictionary *response) { // Parse the JSON response NSDictionary *results = response[@"results"]; // Load the GIFs into your view NSLog(@"Auto Complete Result: %@", results); };
ข้อความค้นหาที่มาแรง
URL หลัก
https://tenor.googleapis.com/v2/trending_terms?<parameters>
รับออบเจ็กต์ JSON ที่มีรายการคำค้นหายอดนิยมในปัจจุบัน AI ของ Tenor จะอัปเดตรายการทุกชั่วโมง
แนวทางปฏิบัติแนะนำ
- หากต้องการแยกความแตกต่างของการผสานรวม ให้ระบุพารามิเตอร์
client_key
พร้อมกับkey
ของ API - แสดงผลลัพธ์ตามลำดับที่การตอบกลับระบุ
พารามิเตอร์
ตารางต่อไปนี้แสดงรายละเอียดพารามิเตอร์สำหรับปลายทางคำค้นหายอดนิยม
พารามิเตอร์ | |
---|---|
key |
จำเป็น
คีย์ API สำหรับการเข้าถึง API ที่มีสิทธิ์ ไม่มีค่าเริ่มต้น |
client_key |
ขอแนะนำ
สตริงที่ไคลเอ็นต์ระบุซึ่งแสดงถึงการผสานรวม คีย์ไคลเอ็นต์ช่วยให้คุณใช้คีย์ API เดียวกันในการผสานรวมต่างๆ ได้ แต่ยังคงแยกความแตกต่างได้ สำหรับการผสานรวมแอป ให้ใช้ค่า พฤติกรรมที่กำหนดเองของไคลเอ็นต์จะทริกเกอร์โดยการจับคู่พารามิเตอร์ ไม่มีค่าเริ่มต้น |
country |
ขอแนะนำ
ระบุประเทศต้นทางของคำขอ โดยระบุรหัสประเทศ 2 ตัวอักษร ISO 3166-1 ค่าเริ่มต้นคือ |
locale |
ขอแนะนำ
ระบุภาษาเริ่มต้นเพื่อตีความสตริงการค้นหา คุณสามารถใช้รหัสประเทศที่ระบุใน ค่าเริ่มต้นคือ |
limit |
ไม่บังคับ
ดึงข้อมูลผลลัพธ์สูงสุดตามจำนวนที่ระบุ ค่าเริ่มต้นคือ |
รูปแบบการตอบกลับ
ตารางต่อไปนี้แสดงรายละเอียดเกี่ยวกับรูปแบบการตอบกลับสำหรับปลายทางของคำค้นหายอดนิยม
คีย์ | |
---|---|
results |
อาร์เรย์ของข้อความค้นหาที่แนะนำ ระบบจะจัดเรียงคำตามเทรนด์ |
ตัวอย่างคำขอ
Curl
/* trending Terms call */ curl "https://tenor.googleapis.com/v2/trending_terms?key=API_KEY&client_key=my_test_app"
Python
import requests import json apikey = "API_KEY" # click to set to your apikey ckey = "my_test_app" # set the client_key for the integration # get the current list of categories - using the default locale of en_US r = requests.get("https://tenor.googleapis.com/v2/trending_terms?key=%s&client_key=%s" % (apikey,ckey)) if r.status_code == 200: trending_terms = json.loads(r.content) else: trending_terms = None # load the results print(trending_terms)
Android/Java
import android.app.Application; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; public class App extends Application { private static final String API_KEY = "API_KEY"; private static final String CLIENT_KEY = "my_test_app"; private static final String LogTag = "TenorTest"; @Override public void onCreate() { super.onCreate(); new Thread() { @Override public void run() { // get the current list of categories JSONObject terms = getTrendingTerms(); // load the results for the user Log.v(LogTag, "Trending Terms: " + terms.toString()); } }.start(); } /** * Get trending terms */ public static JSONObject getTrendingTerms() { // get the categories - using the default locale of en_US final String url = String.format("https://tenor.googleapis.com/v2/trending_terms?key=%1$s&client_key=%2$s", API_KEY, CLIENT_KEY); try { return get(url); } catch (IOException | JSONException ignored) { } return null; } /** * Construct and run a GET request */ private static JSONObject get(String url) throws IOException, JSONException { HttpURLConnection connection = null; try { // Get request connection = (HttpURLConnection) new URL(url).openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("GET"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); // Handle failure int statusCode = connection.getResponseCode(); if (statusCode != HttpURLConnection.HTTP_OK && statusCode != HttpURLConnection.HTTP_CREATED) { String error = String.format("HTTP Code: '%1$s' from '%2$s'", statusCode, url); throw new ConnectException(error); } // Parse response return parser(connection); } catch (Exception ignored) { } finally { if (connection != null) { connection.disconnect(); } } return new JSONObject(""); } /** * Parse the response into JSONObject */ private static JSONObject parser(HttpURLConnection connection) throws JSONException { char[] buffer = new char[1024 * 4]; int n; InputStream stream = null; try { stream = new BufferedInputStream(connection.getInputStream()); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); StringWriter writer = new StringWriter(); while (-1 != (n = reader.read(buffer))) { writer.write(buffer, 0, n); } return new JSONObject(writer.toString()); } catch (IOException ignored) { } finally { if (stream != null) { try { stream.close(); } catch (IOException ignored) { } } } return new JSONObject(""); } }
Swift 2.0+/iOS
let apikey = "API_KEY" let clientkey = "my_test_app" func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { requestData() return true } /** Execute web requests to retrieve trending terms. */ func requestData() { // Get the current list of categories - using the default locale of en_US let categoryRequest = URLRequest(url: URL(string: String(format: "https://tenor.googleapis.com/v2/trending_terms?key=%@&client_key=%@", apikey, clientkey))!) makeWebRequest(urlRequest: categoryRequest, callback: tenorTermsResultsHandler) // Data will be loaded by each request's callback } /** Async URL requesting function. */ func makeWebRequest(urlRequest: URLRequest, callback: @escaping ([String:AnyObject]) -> ()) { // Make the async request and pass the resulting JSON object to the callback let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in do { if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] { // Push the results to our callback callback(jsonResult) } } catch let error as NSError { print(error.localizedDescription) } } task.resume() } /** Web response handler for GIF categories. */ func tenorTermsResultsHandler(response: [String:AnyObject]) { // Parse the JSON response let terms = response["results"]! // Load the categories into your view print("Trending Terms Results: (terms)") } }
JavaScript
<!DOCTYPE html> <html> <script> // url Async requesting function function httpGetAsync(theUrl, callback) { // create the request object var xmlHttp = new XMLHttpRequest(); // set the state change callback to capture when the response comes in xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { callback(xmlHttp.responseText); } } // open as a GET call, pass in the url and set async = True xmlHttp.open("GET", theUrl, true); // call send with no params as they were passed in on the url string xmlHttp.send(null); return; } // callback for GIF categories function tenorCallback_terms(responsetext) { // Parse the JSON response var response_objects = JSON.parse(responsetext); terms = response_objects["results"]; document.getElementById("res").innerHTML = terms return; } // function to call the trending terms function grab_data() { // set the apikey and limit var apikey = "API_KEY"; var clientkey = "my_test_app"; var lmt = 10; // get the current list of trending terms - using the default locale of en_US var cat_url = "https://tenor.googleapis.com/v2/trending_terms?key=" + apikey + "&client_key=" + clientkey; httpGetAsync(cat_url,tenorCallback_terms); // data will be loaded by each call's callback return; } // SUPPORT FUNCTIONS ABOVE // MAIN BELOW // start the flow grab_data(); </script> <style> .container { position: relative; text-align: center; color: white; } .title { text-align: center; } .centered { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } </style> <body> <h2 class="title">Trending Terms</h2> <div class="container" id="res"> </div> </body> </html>
Objective-C
NSString *apiKey = @"API_KEY"; NSString *clientKey = @"my_test_app"; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self requestData]; return YES; } /** Execute web requests to retrieve trending terms. */ -(void)requestData { // Get the current list of categories - using the default locale of en_US NSString *categoryUrlString = [NSString stringWithFormat:@"https://tenor.googleapis.com/v2/trending_terms?key=%@&client_key=%@", apiKey, clientkey]; NSURL *categoryUrl = [NSURL URLWithString:categoryUrlString]; NSURLRequest *categoryRequest = [NSURLRequest requestWithURL:categoryUrl]; [self makeWebRequest:categoryRequest withCallback:tenorTermsResultsHandler]; // Data will be loaded by each request's callback } /** Async URL requesting function. */ -(void)makeWebRequest:(NSURLRequest *)urlRequest withCallback:(void (^)(NSDictionary *))callback { // Make the async request and pass the resulting JSON object to the callback NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSError *jsonError = nil; NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&jsonError]; if(jsonError != nil) { NSLog(@"%@", jsonError.localizedDescription); return; } // Push the results to our callback callback(jsonResult); }]; [task resume]; } /** Web response handler for GIF categories. */ void (^tenorTermsResultsHandler)(NSDictionary *) = ^void(NSDictionary *response) { // Parse the JSON response NSDictionary *terms = response[@"results"]; // Load the categories into your view NSLog(@"Trending Terms: %@", terms); };
ลงทะเบียนเพื่อแชร์
URL หลัก
https://tenor.googleapis.com/v2/registershare?<parameters>
ลงทะเบียนการแชร์ GIF หรือสติกเกอร์ของผู้ใช้
แนวทางปฏิบัติแนะนำ
- หากต้องการแยกความแตกต่างของการผสานรวม ให้ระบุพารามิเตอร์
client_key
พร้อมกับkey
ของ API - ระบุข้อความค้นหา ซึ่งจะช่วยปรับแต่ง AI ของเครื่องมือค้นหาของ Tenor ให้ดียิ่งขึ้น เพื่อช่วยให้ผู้ใช้ค้นหา GIF หรือสติกเกอร์ที่ต้องการได้ง่ายขึ้น
- ใช้พารามิเตอร์
locale
เพื่อเพิ่มความเกี่ยวข้องระดับภูมิภาคของสัญญาณการแชร์ ค่าเริ่มต้นคือen_US
พารามิเตอร์
ตารางต่อไปนี้แสดงรายละเอียดพารามิเตอร์สำหรับปลายทาง Register Share
พารามิเตอร์ | |
---|---|
key |
จำเป็น
คีย์ API สำหรับการเข้าถึง API ที่มีสิทธิ์ ไม่มีค่าเริ่มต้น |
id |
จำเป็น
ไม่มีค่าเริ่มต้น |
client_key |
ขอแนะนำ
สตริงที่ไคลเอ็นต์ระบุซึ่งแสดงถึงการผสานรวม คีย์ไคลเอ็นต์ช่วยให้คุณใช้คีย์ API เดียวกันในการผสานรวมต่างๆ ได้ แต่ยังคงแยกความแตกต่างได้ สำหรับการผสานรวมแอป ให้ใช้ค่า พฤติกรรมที่กำหนดเองของไคลเอ็นต์จะทริกเกอร์โดยการจับคู่พารามิเตอร์ ไม่มีค่าเริ่มต้น |
country |
ขอแนะนำ
ระบุประเทศต้นทางของคำขอ โดยระบุรหัสประเทศ 2 ตัวอักษร ISO 3166-1 ค่าเริ่มต้นคือ |
locale |
ขอแนะนำ
ระบุภาษาเริ่มต้นเพื่อตีความสตริงการค้นหา คุณสามารถใช้รหัสประเทศที่ระบุใน ค่าเริ่มต้นคือ |
q |
ขอแนะนำ
สตริงการค้นหาที่ทําให้เกิดการแชร์นี้ ไม่มีค่าเริ่มต้น |
รูปแบบการตอบกลับ
ไม่มีการตอบกลับอย่างเป็นทางการไปยังปลายทาง Register Share นักพัฒนาแอปสามารถตรวจสอบรหัสการตอบกลับ HTTPS เพื่อดูว่าเข้าถึง API ได้สำเร็จหรือไม่
ตัวอย่างคำขอ
Curl
/* register share */ curl "https://tenor.googleapis.com/v2/registershare?id=16989471141791455574&key=API_KEY&client_key=my_test_app&q=excited"
Python
# set the apikey apikey = "API_KEY" # click to set to your apikey ckey = "my_test_app" # set the client_key for the integration # get the GIF's id and search used shard_gifs_id = top_8gifs["results"][0]["id"] search_term = "excited" r = requests.get("https://tenor.googleapis.com/v2/registershare?id=%s&key=%s&client_key=%s&q=%s" % (shard_gifs_id, apikey, ckey, search_term)) if r.status_code == 200: pass # move on else: pass # handle error
Android/Java
import android.app.Application; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; public class App extends Application { private static final String API_KEY = "API_KEY"; private static final String CLIENT_KEY = "my_test_app"; private static final String LogTag = "TenorTest"; @Override public void onCreate() { super.onCreate(); new Thread() { @Override public void run() { // test values for the share example final String gifId = "16989471141791455574"; final String searchTerm = "excited"; // make the register share call JSONObject shareResult = registerShare(gifId, searchTerm); // load the results for the user Log.v(LogTag, "Share Results: " + shareResult.toString()); } }.start(); } /** * Register the GIF share */ public static JSONObject registerShare(String gifId, String searchTerm) { // make register share request - using default locale of EN_US final String url = String.format("https://tenor.googleapis.com/v2/registershare?key=%1$s&client_key=%2$s&id=%3$s&q=%4$s", API_KEY, CLIENT_KEY, gifId, searchTerm); try { return get(url); } catch (IOException | JSONException ignored) { } return null; } /** * Construct and run a GET request */ private static JSONObject get(String url) throws IOException, JSONException { HttpURLConnection connection = null; try { // Get request connection = (HttpURLConnection) new URL(url).openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("GET"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); // Handle failure int statusCode = connection.getResponseCode(); if (statusCode != HttpURLConnection.HTTP_OK && statusCode != HttpURLConnection.HTTP_CREATED) { String error = String.format("HTTP Code: '%1$s' from '%2$s'", statusCode, url); throw new ConnectException(error); } // Parse response return parser(connection); } catch (Exception ignored) { } finally { if (connection != null) { connection.disconnect(); } } return new JSONObject(""); } /** * Parse the response into JSONObject */ private static JSONObject parser(HttpURLConnection connection) throws JSONException { char[] buffer = new char[1024 * 4]; int n; InputStream stream = null; try { stream = new BufferedInputStream(connection.getInputStream()); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); StringWriter writer = new StringWriter(); while (-1 != (n = reader.read(buffer))) { writer.write(buffer, 0, n); } return new JSONObject(writer.toString()); } catch (IOException ignored) { } finally { if (stream != null) { try { stream.close(); } catch (IOException ignored) { } } } return new JSONObject(""); } }
Swift 2.0+/iOS
let apikey = "API_KEY" let clientkey = "my_test_app" func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // test values for the share example let gifId = "16989471141791455574" let searchTerm = "excited" // register the user's share registerShare(gifId: gifId, searchTerm: searchTerm) return true } // Function for handling a user's selection of a GIF to share. // In a production application, the GIF id should be the "id" field of the GIF response object that the user selected // to share. The search term should be the user's last search. func registerShare(gifId: String, searchTerm: String) { // Register the user's share - using the default locale of en_US let shareRequest = URLRequest(url: URL(string: String(format: "https://tenor.googleapis.com/v2/registershare?key=%@&client_key=%@&id=%@&q=%@", apikey, clientkey, gifId, searchTerm))!) makeWebRequest(urlRequest: shareRequest, callback: tenorShareHandler) // Data will be loaded by each request's callback } /** Async URL requesting function. */ func makeWebRequest(urlRequest: URLRequest, callback: @escaping ([String:AnyObject]) -> ()) { // Make the async request and pass the resulting JSON object to the callback let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in do { if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] { // Push the results to our callback callback(jsonResult) } } catch let error as NSError { print(error.localizedDescription) } } task.resume() } /** Web response handler for search requests. */ func tenorShareHandler(response: [String:AnyObject]) { // no response expected from the registershare endpoint }
JavaScript
<!DOCTYPE html> <html> <script> // url Async requesting function function httpGetAsync(theUrl, callback) { // create the request object var xmlHttp = new XMLHttpRequest(); // set the state change callback to capture when the response comes in xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { callback(xmlHttp.responseText); } } // open as a GET call, pass in the url and set async = True xmlHttp.open("GET", theUrl, true); // call send with no params as they were passed in on the url string xmlHttp.send(null); return; } // callback for share event function tenorCallback_share(responsetext) { // no action is needed in the share callback } // function to call the register share endpoint function send_share(search_term,shared_gifs_id) { // set the apikey and limit var apikey = "API_KEY"; var clientkey = "my_test_app"; var share_url = "https://tenor.googleapis.com/v2/registershare?id=" + shared_gifs_id + "&key=" + apikey + "&client_key=" + clientkey + "&q=" + search_term; httpGetAsync(share_url,tenorCallback_share); } // SUPPORT FUNCTIONS ABOVE // MAIN BELOW // grab search term from cookies or some other storage search_term = "excited"; // GIF id from the shared gif // shared_gifs_id = gif_json_response_object_from_search["results"][0]["id"] shared_gifs_id = "16989471141791455574"; // example // send the share notifcation back to Tenor send_share(search_term,shared_gifs_id); alert("share sent!"); </script> <body> </body> </html>
Objective-C
NSString *apiKey = @"API_KEY"; NSString *clientKey = @"my_test_app"; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self requestData]; return YES; } /** Function for handling a user's selection of a GIF to share. In a production application, the GIF id should be the "id" field of the GIF response object that the user selected to share. The search term should be the user's last search. */ -(void)requestData { // the test search term NSString *searchQuery = @"excited"; NSString *gifId = @"16989471141791455574"; // Send the share event for the GIF id and search query NSString *UrlString = [NSString stringWithFormat:@"https://tenor.googleapis.com/v2/registershare?id=%@&key=%@&client_key=%@&q=%@", gifId, apiKey, clientKey, searchQuery]; NSURL *searchUrl = [NSURL URLWithString:UrlString]; NSURLRequest *searchRequest = [NSURLRequest requestWithURL:searchUrl]; [self makeWebRequest:searchRequest withCallback:tenorSearchResultsHandler]; // Data will be loaded by each request's callback } /** Async URL requesting function. */ -(void)makeWebRequest:(NSURLRequest *)urlRequest withCallback:(void (^)(NSDictionary *))callback { // Make the async request and pass the resulting JSON object to the callback NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NStopGifsError *jsonError = nil; NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&jsonError]; if(jsonError != nil) { NSLog(@"%@", jsonError.localizedDescription); return; } // Push the results to our callback callback(jsonResult); }]; [task resume]; } /** Web response handler for registered shares */ void (^tenorShareResultsHandler)(NSDictionary *) = ^void(NSDictionary *response) { // no response expected from the registershare endpoint. };
โพสต์
URL หลัก
https://tenor.googleapis.com/v2/posts?<parameters>
รับ GIF, สติกเกอร์ หรือทั้ง 2 อย่างรวมกันสำหรับรหัสที่ระบุ
แนวทางปฏิบัติแนะนำ
- หากต้องการแยกความแตกต่างของการผสานรวม ให้ระบุพารามิเตอร์
client_key
พร้อมกับkey
ของ API - หากต้องการลดจำนวนรูปแบบ GIF ที่แสดงผล ให้ใช้พารามิเตอร์
media_filter
ซึ่งจะช่วยลดขนาดออบเจ็กต์การตอบกลับได้ถึง 75%
พารามิเตอร์
ตารางต่อไปนี้แสดงรายละเอียดเกี่ยวกับพารามิเตอร์ของปลายทางโพสต์
พารามิเตอร์ | |
---|---|
key |
จำเป็น
คีย์ API สำหรับการเข้าถึง API ที่มีสิทธิ์ ไม่มีค่าเริ่มต้น |
ids |
จำเป็น
รายการรหัส ออบเจ็กต์การตอบกลับที่คั่นด้วยคอมมา ไม่มีค่าเริ่มต้น และค่าสูงสุดคือ |
client_key |
ขอแนะนำ
สตริงที่ไคลเอ็นต์ระบุซึ่งแสดงถึงการผสานรวม คีย์ไคลเอ็นต์ช่วยให้คุณใช้คีย์ API เดียวกันในการผสานรวมต่างๆ ได้ แต่ยังคงแยกความแตกต่างได้ สำหรับการผสานรวมแอป ให้ใช้ค่า พฤติกรรมที่กำหนดเองของไคลเอ็นต์จะทริกเกอร์โดยการจับคู่พารามิเตอร์ ไม่มีค่าเริ่มต้น |
media_filter |
ขอแนะนำ
รายการรูปแบบ GIF ที่คั่นด้วยคอมมาเพื่อกรอง
ออบเจ็กต์การตอบกลับ โดยค่าเริ่มต้น ตัวอย่าง: ไม่มีค่าเริ่มต้น |
รูปแบบการตอบกลับ
ตารางต่อไปนี้แสดงรายละเอียดเกี่ยวกับรูปแบบการตอบกลับสำหรับปลายทางของโพสต์
คีย์ | |
---|---|
results |
อาร์เรย์ของ
ออบเจ็กต์การตอบกลับที่สอดคล้องกับออบเจ็กต์ที่ส่งในรายการ |
ตัวอย่างคำขอ
Curl
/* Posts endpoint */ curl "https://tenor.googleapis.com/v2/posts?key=API_KEY&client_key=my_test_app&ids=11586094175715197775"
Python
apikey = "API_KEY" # click to set to your apikey ckey = "my_test_app" # set the client_key for the integration # our gif id gifid = "11586094175715197775" # get the specific gif r = requests.get( "https://tenor.googleapis.com/v2/posts?ids=%s&key=%s&client_key=%s" % (gifid, apikey,ckey)) if r.status_code == 200: # load the GIFs using the urls for the smaller GIF sizes gifs = json.loads(r.content) print(gifs) else: gifs = None
Android/Java
import android.app.Application; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; public class App extends Application { private static final String API_KEY = "API_KEY"; private static final String CLIENT_KEY = "my_test_app"; private static final String LogTag = "TenorTest"; @Override public void onCreate() { super.onCreate(); new Thread() { @Override public void run() { final String gif_id ="11586094175715197775"; // get the requested gif JSONObject gifResult = getGifResults(gif_id); // load the results for the user Log.v(LogTag, "Gif Results: " + gifResult.toString()); } }.start(); } /** * Get Search Result GIFs */ public static JSONObject getGifResults(String gif_id) { final String url = String.format("https://tenor.googleapis.com/v2/posts?ids=%1$s&key=%2$s&client_key=%3$s", gif_id, API_KEY, CLIENT_KEY); try { return get(url); } catch (IOException | JSONException ignored) { } return null; } /** * Construct and run a GET request */ private static JSONObject get(String url) throws IOException, JSONException { HttpURLConnection connection = null; try { // Get request connection = (HttpURLConnection) new URL(url).openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestMethod("GET"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); // Handle failure int statusCode = connection.getResponseCode(); if (statusCode != HttpURLConnection.HTTP_OK && statusCode != HttpURLConnection.HTTP_CREATED) { String error = String.format("HTTP Code: '%1$s' from '%2$s'", statusCode, url); throw new ConnectException(error); } // Parse response return parser(connection); } catch (Exception ignored) { } finally { if (connection != null) { connection.disconnect(); } } return new JSONObject(""); } /** * Parse the response into JSONObject */ private static JSONObject parser(HttpURLConnection connection) throws JSONException { char[] buffer = new char[1024 * 4]; int n; InputStream stream = null; try { stream = new BufferedInputStream(connection.getInputStream()); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); StringWriter writer = new StringWriter(); while (-1 != (n = reader.read(buffer))) { writer.write(buffer, 0, n); } return new JSONObject(writer.toString()); } catch (IOException ignored) { } finally { if (stream != null) { try { stream.close(); } catch (IOException ignored) { } } } return new JSONObject(""); } }
Swift 2.0+/iOS
let apikey = "API_KEY" let clientkey = "my_test_app" func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { requestData() return true } /** Execute web request to the requested gif. */ func requestData() { // the test gif id let gifid = "11586094175715197775" // request the gif let searchRequest = URLRequest(url: URL(string: String(format: "https://tenor.googleapis.com/v2/posts?ids=%@&key=%@&client_key=%@", gifid, apikey, clientkey))!) makeWebRequest(urlRequest: searchRequest, callback: tenorgifHandler) // Data will be loaded by each request's callback } /** Async URL requesting function. */ func makeWebRequest(urlRequest: URLRequest, callback: @escaping ([String:AnyObject]) -> ()) { // Make the async request and pass the resulting JSON object to the callback let task = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in do { if let jsonResult = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject] { // Push the results to our callback callback(jsonResult) } } catch let error as NSError { print(error.localizedDescription) } } task.resume() } /** Web response handler for search requests. */ func tenorgifHandler(response: [String:AnyObject]) { // Parse the JSON response let responseGifs = response["results"]! // Load the GIFs into your view print("Result GIFS: (responseGifs)") } }
JavaScript
<!DOCTYPE html> <html> <script> // url Async requesting function function httpGetAsync(theUrl, callback) { // create the request object var xmlHttp = new XMLHttpRequest(); // set the state change callback to capture when the response comes in xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { callback(xmlHttp.responseText); } } // open as a GET call, pass in the url and set async = True xmlHttp.open("GET", theUrl, true); // call send with no params as they were passed in on the url string xmlHttp.send(null); return; } // callback for the requested gif function tenorCallback_gifs(responsetext) { // Parse the JSON response var response_objects = JSON.parse(responsetext); var gif = response_objects["results"]; // load the GIFs -- for our example we will load the first GIFs preview size (nanogif) and share size (gif) document.getElementById("preview_gif").src = gif[0]["media_formats"]["nanogif"]["url"]; document.getElementById("share_gif").src = gif[0]["media_formats"]["gif"]["url"]; return; } // function to call the trending and category endpoints function grab_data() { // set the apikey and limit var apikey = "API_KEY"; var clientkey = "my_test_app"; // GIF id var gif_id = "11586094175715197775"; // using default locale of en_US var search_url = "https://tenor.googleapis.com/v2/posts?ids=" + gif_id + "&key=" + apikey + "&client_key=" + clientkey; httpGetAsync(search_url,tenorCallback_gifs); // data will be loaded by each call's callback return; } // SUPPORT FUNCTIONS ABOVE // MAIN BELOW // start the flow grab_data(); </script> <body> <h2># 1 GIF loaded - preview image</h2> <img id="preview_gif" src="" alt="" style="width:220px;height:164px;"> <h2># 1 GIF loaded - share image</h2> <img id="share_gif" src="" alt="" style="width:498px;height:372px;"> </body> </html>
Objective-C
NSString *apiKey = @"API_KEY"; NSString *clientKey = @"my_test_app"; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self requestData]; return YES; } /** Execute web request to retrieve the requested gif. */ -(void)requestData { NSString *gifid = @"11586094175715197775"; // Get the GIF NSString *UrlString = [NSString stringWithFormat:@"https://tenor.googleapis.com/v2/posts?key=%@&client_key=%@&ids=%@", apiKey, clientKey, gifid]; NSURL *searchUrl = [NSURL URLWithString:UrlString]; NSURLRequest *searchRequest = [NSURLRequest requestWithURL:searchUrl]; [self makeWebRequest:searchRequest withCallback:tenorgifResultsHandler]; // Data will be loaded by each request's callback } /** Async URL requesting function. */ -(void)makeWebRequest:(NSURLRequest *)urlRequest withCallback:(void (^)(NSDictionary *))callback { // Make the async request and pass the resulting JSON object to the callback NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:urlRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NStopGifsError *jsonError = nil; NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&jsonError]; if(jsonError != nil) { NSLog(@"%@", jsonError.localizedDescription); return; } // Push the results to our callback callback(jsonResult); }]; [task resume]; } /** Web response handler for searches. */ void (^tenorgifResultsHandler)(NSDictionary *) = ^void(NSDictionary *response) { // Parse the JSON response NSDictionary *gif = response[@"results"]; // Load the GIFs into your view NSLog(@"GIF Results: %@", gif); };