SDK integration

Updated at:

This guide explains how to make API calls using Alibaba Cloud SDKs with AccessKey authentication. All code samples call the Unified Search API.

1. Get an AccessKey pair

Step 1: Create a RAM user and grant permissions Create a RAM user and grant permissions
Step 2: Create an AccessKey Create an AccessKey pair for a RAM user
Note

If you need to reuse an existing AccessKey, grant the AliyunIQSFullAccess permission to the corresponding RAM user.

2. API reference

Category

API

Description

Unified Search API

CN, Global, and Generic editions

Unified Search (text search) API

multimodal (image search) edition

Multimodal Search (image search) API

Web Q&A Agent

Lite and Pro editions

Intelligent Conversation API

Web Page Parsing

ReadPageBasic

Web Page Parsing Basic API

ReadPageScrape

Web Page Parsing Enhanced API

Vertical Search

POISearch

Surrounding Query API

MedicalAnswer

Medical Q&A API

MedicalKnowledge

Health Graph API

ScanFile

File Scan API (ScanFile) (Coming soon)

3. SDK integration

Python SDK

Installation

pip3 install alibabacloud_iqs20241111==1.10.1

Synchronous call

This example shows a synchronous call to the Unified Search API (unified_search).

import os

from Tea.exceptions import TeaException
from alibabacloud_iqs20241111 import models
from alibabacloud_iqs20241111.client import Client
from alibabacloud_tea_openapi import models as open_api_models


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> Client:
        config = open_api_models.Config(
            # TODO: Replace with your AccessKey pair. We recommend loading them from environment variables.
            access_key_id='$YOUR_ACCESS_KEY',
            access_key_secret='$YOUR_ACCESS_SECRET'
        )
        config.endpoint = f'iqs.cn-zhangjiakou.aliyuncs.com'
        return Client(config)

    @staticmethod
    def main() -> None:
        client = Sample.create_client()
        advancedParams = {
            "startPublishedDate": "2025-10-01",
            "endPublishedDate": "2025-10-10"
        }
        run_instances_request = models.UnifiedSearchRequest(
            body=models.UnifiedSearchInput(
                query='Hangzhou cuisine',
                time_range='NoLimit',
                contents=models.RequestContents(
                    summary=False,
                    main_text=True,
                ),
                advanced_params=advancedParams
            )
        )
        try:
            response = client.unified_search(run_instances_request)
            print(
                f"api success, request_id:{response.body.request_id}, size :{len(response.body.page_items)}, server_cost:{response.body.search_information.search_time}")
            if len(response.body.scene_items) > 0:
                print(f"scene_items:{response.body.scene_items[0]}")
            for index, item in enumerate(response.body.page_items):
                print(f"{index}. {'-' * 20}")
                print(f"title:{item.title}")
                print(f"snippet:{item.snippet}")
                print(f"summary:{item.summary}")
                print(f"published_time:{item.published_time}")
                print(f"link:{item.link}")
                print(f"rerank_score:{item.rerank_score}")

        except TeaException as e:
            code = e.code
            request_id = e.data.get("requestId")
            message = e.data.get("message")
            print(f"api exception, requestId:{request_id}, code:{code}, message:{message}")


if __name__ == '__main__':
    Sample.main()

Asynchronous call

import asyncio
import os
import time

from Tea.exceptions import TeaException
from alibabacloud_iqs20241111 import models
from alibabacloud_iqs20241111.client import Client
from alibabacloud_tea_openapi import models as open_api_models


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> Client:
        config = open_api_models.Config(
            # TODO: Replace with your AccessKey pair. We recommend loading them from environment variables.
            access_key_id=os.environ.get('ACCESS_KEY'),
            access_key_secret=os.environ.get('ACCESS_SECRET')

        )
        config.endpoint = f'iqs.cn-zhangjiakou.aliyuncs.com'
        return Client(config)

    @staticmethod
    async def main_async() -> None:
        start = time.time()
        client = Sample.create_client()
        run_instances_request = models.UnifiedSearchRequest(
            body=models.UnifiedSearchInput(
                query='Hangzhou cuisine',
                time_range='NoLimit',
                contents=models.RequestContents(
                    # Note: The summary feature is billed separately.
                    summary=True,
                    main_text=True,
                )
            )
        )
        try:
            # Use the asynchronous method
            response = await client.unified_search_async(run_instances_request)
            print(
                f"api success, request_id:{response.body.request_id}, size :{len(response.body.page_items)}, server_cost:{response.body.search_information.search_time}")
            if len(response.body.scene_items) > 0:
                print(f"scene_items:{response.body.scene_items[0]}")
            for index, item in enumerate(response.body.page_items):
                print(f"{index}. {'-' * 20}")
                print(f"title:{item.title}")
                print(f"snippet:{item.snippet}")
                print(f"summary:{item.summary}")
                print(f"published_time:{item.published_time}")
                print(f"link:{item.link}")
                print(f"rerank_score:{item.rerank_score}")
        except TeaException as e:
            code = e.code
            request_id = e.data.get("requestId")
            message = e.data.get("message")
            print(f"api exception, requestId:{request_id}, code:{code}, message:{message}")

if __name__ == '__main__':
    asyncio.run(Sample.main_async())

Java SDK

Installation

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>iqs20241111</artifactId>
    <version>1.10.1</version>
</dependency>

Sample code

package com.aliyun.iqs.example;

import com.aliyun.iqs20241111.Client;
import com.aliyun.iqs20241111.models.*;
import com.aliyun.teaopenapi.models.Config;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class UnifiedSearchExample {
    public static void main(String[] args) throws Exception {
        Client client = initClient();
        invoke(client, "Hangzhou cuisine", "NoLimit");
    }

    private static Client initClient() throws Exception {
        // TODO: Replace with your AccessKey pair. We recommend loading them from environment variables.
        String accessKeyId = "$YOUR_ACCESS_KEY";
        String accessKeySecret = "$YOUR_ACCESS_SECRET";
        
        Config config = new Config()
            .setAccessKeyId(accessKeyId)
            .setAccessKeySecret(accessKeySecret);

        config.setEndpoint("iqs.cn-zhangjiakou.aliyuncs.com");
        return new Client(config);
    }

    private static void invoke(Client client, String query, String timeRange) {
        UnifiedSearchInput input = new UnifiedSearchInput();
        input.setQuery(query);
        input.setTimeRange(timeRange);
        
        // Use advancedParams to specify a precise date range.
        Map<String, String> advancedParams = new HashMap<>();
        advancedParams.put("startPublishedDate","2025-10-01");
        advancedParams.put("endPublishedDate","2025-10-10");
        input.setAdvancedParams(advancedParams);

        // Note: The summary feature is billed separately.
        RequestContents requestContents = new RequestContents().setSummary(true).setMainText(true);
        input.setContents(requestContents);
        UnifiedSearchRequest request = new UnifiedSearchRequest().setBody(input);

        try {
            UnifiedSearchResponse response = client.unifiedSearch(request);
            UnifiedSearchOutput result = response.getBody();

            printOutput(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void printOutput(UnifiedSearchOutput output) {
        // Use GsonBuilder to create a Gson instance for pretty-printing.
        Gson gson = new GsonBuilder()
            .setPrettyPrinting()
            .disableHtmlEscaping()
            .create();

        // Print the formatted JSON output.
        String prettyJson = gson.toJson(output);
        System.out.println(prettyJson);
    }
}

Go SDK

Installation

require (
  github.com/alibabacloud-go/iqs-20241111 v1.10.1
  github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.10
)

Sample code

package main

import (
	"fmt"
	"log"
	"os"

	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
	iqs20241111 "github.com/alibabacloud-go/iqs-20241111/client"
	util "github.com/alibabacloud-go/tea-utils/v2/service"
	"github.com/alibabacloud-go/tea/tea"
)

const endpointURL = "iqs.cn-zhangjiakou.aliyuncs.com"

func createClient() (*iqs20241111.Client, error) {
	// Get your AccessKey pair from environment variables.
	accessKeyID := os.Getenv("ACCESS_KEY")
	accessKeySecret := os.Getenv("ACCESS_SECRET")

	if accessKeyID == "" || accessKeySecret == "" {
		return nil, fmt.Errorf("the ACCESS_KEY or ACCESS_SECRET environment variable is not set")
	}

	config := &openapi.Config{
		AccessKeyId:     tea.String(accessKeyID),
		AccessKeySecret: tea.String(accessKeySecret),
		Endpoint:        tea.String(endpointURL),
	}

	return iqs20241111.NewClient(config)
}

func runUnifiedSearch(client *iqs20241111.Client) error {
	body := &iqs20241111.UnifiedSearchInput{
		Query:     tea.String("Hangzhou cuisine"),
		TimeRange: tea.String("NoLimit"),
		// Note: The summary feature is billed separately.
		Contents: &iqs20241111.RequestContents{
			Summary:  tea.Bool(true),
			MainText: tea.Bool(true),
		},
	}
	request := &iqs20241111.UnifiedSearchRequest{
		Body: body,
	}
	runtime := &util.RuntimeOptions{}

	resp, err := client.UnifiedSearchWithOptions(request, nil, runtime)
	if err != nil {
		return fmt.Errorf("unified search failed: %w", err)
	}

	fmt.Printf("[%s] response: %s\n", *resp.Body.RequestId, resp.Body)
	return nil
}

func main() {
	client, err := createClient()
	if err != nil {
		log.Fatalf("Failed to create client: %v", err)
	}

	if err := runUnifiedSearch(client); err != nil {
		log.Fatalf("Error running unified search: %v", err)
	}
}

Node.js SDK

Installation

npm install @alicloud/iqs20241111@1.10.1

Sample code

import * as $OpenApi from '@alicloud/openapi-client';
import * as $IQS20241111 from '@alicloud/iqs20241111';

class Sample {
  static createClient(): $IQS20241111.default {
    const config = new $OpenApi.Config({
      // Configure the client with an AccessKey pair from environment variables.
      accessKeyId: process.env.ALIYUN_ACCESS_KEY,
      accessKeySecret: process.env.ALIYUN_ACCESS_SECRET,
    });
    config.endpoint = 'iqs.cn-zhangjiakou.aliyuncs.com';
    return new $IQS20241111.default(config);
  }

  static async main(): Promise<void> {
    const client = Sample.createClient();
    
    const advancedParams = {
      startPublishedDate: '2025-10-01',
      endPublishedDate: '2025-10-10',
    };

    const unifiedSearchRequest = new $IQS20241111.UnifiedSearchRequest({
      body: new $IQS20241111.UnifiedSearchInput({
        query: 'Hangzhou cuisine',
        timeRange: 'NoLimit',
        contents: new $IQS20241111.RequestContents({
          // Note: The summary feature is billed separately.
          summary: true,
          mainText: true,
        }),
        advancedParams: advancedParams,
      }),
    });

    try {
      const response = await client.unifiedSearch(unifiedSearchRequest);
      
      if (!response.body) {
        console.error('The response body is empty');
        return;
      }

      console.log(
        `api success, request_id:${response.body.requestId}, size:${response.body.pageItems?.length || 0}, server_cost:${response.body.searchInformation?.searchTime}`
      );

      if (response.body.sceneItems && response.body.sceneItems.length > 0) {
        console.log(`scene_items:${JSON.stringify(response.body.sceneItems[0])}`);
      }

      response.body.pageItems?.forEach((item: any, index: number) => {
        console.log(`${index}. ${'-'.repeat(20)}`);
        console.log(`title:${item.title}`);
        console.log(`snippet:${item.snippet}`);
        console.log(`summary:${item.summary}`);
        console.log(`published_time:${item.publishedTime}`);
        console.log(`link:${item.link}`);
        console.log(`rerank_score:${item.rerankScore}`);
      });
    } catch (error: any) {
      const code = error.code;
      const requestId = error.data?.requestId;
      const message = error.message;
      console.error(`api exception, requestId:${requestId}, code:${code}, message:${message}`);
    }
  }
}

Sample.main();