

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 取得個人化排名 (AWS SDKs)
<a name="get-personalized-rankings-sdk"></a>

下列程式碼範例示範如何使用 AWS SDKs 取得個人化排名的不同變化。

**Topics**
+ [取得個人化排名](#personalized-ranking-sdk-sample)
+ [在個人化排名中包含項目中繼資料](#getting-personalized-ranking-with-metadata-sdk)
+ [使用內容中繼資料取得個人化排名](#personalized-ranking-contextual-metadata-example)

## 取得個人化排名
<a name="personalized-ranking-sdk-sample"></a>

下列程式碼說明如何取得使用者的個人化排名。指定使用者的 ID 和要為使用者排名的項目 IDs 清單。項目 IDs 必須在您用來訓練解決方案版本的資料中。會傳回排名建議清單。Amazon Personalize 會考慮使用者最感興趣的清單中的第一個項目。

------
#### [ SDK for Python (Boto3) ]

```
import boto3

personalizeRt = boto3.client('personalize-runtime')

response = personalizeRt.get_personalized_ranking(
    campaignArn = "Campaign arn",
    userId = "UserID",
    inputList = ['ItemID1','ItemID2']
)

print("Personalized Ranking")
for item in response['personalizedRanking']:
    print (item['itemId'])
```

------
#### [ SDK for Java 2.x ]

```
public static List<PredictedItem> getRankedRecs(PersonalizeRuntimeClient personalizeRuntimeClient,
                                                String campaignArn,
                                                String userId,
                                                ArrayList<String> items) {

    try {
        GetPersonalizedRankingRequest rankingRecommendationsRequest = GetPersonalizedRankingRequest.builder()
                .campaignArn(campaignArn)
                .userId(userId)
                .inputList(items)
                .build();
  
        GetPersonalizedRankingResponse recommendationsResponse =
                personalizeRuntimeClient.getPersonalizedRanking(rankingRecommendationsRequest);
        List<PredictedItem> rankedItems = recommendationsResponse.personalizedRanking();
        int rank = 1;
        for (PredictedItem item : rankedItems) {
            System.out.println("Item ranked at position " + rank + " details");
            System.out.println("Item Id is : " + item.itemId());
            System.out.println("Item score is : " + item.score());
            System.out.println("---------------------------------------------");
            rank++;
        }
        return rankedItems;
    } catch (PersonalizeRuntimeException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    return null;
}
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients module and commands using ES6 syntax.
import { GetPersonalizedRankingCommand } from "@aws-sdk/client-personalize-runtime";
import { personalizeRuntimeClient } from "./libs/personalizeClients.js";
// Or, create the client here.
// const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: "REGION"});

// Set the ranking request parameters.
export const getPersonalizedRankingParam = {
  campaignArn: "CAMPAIGN_ARN" /* required */,
  userId: "USER_ID" /* required */,
  inputList: ["ITEM_ID_1", "ITEM_ID_2", "ITEM_ID_3", "ITEM_ID_4"],
};

export const run = async () => {
  try {
    const response = await personalizeRuntimeClient.send(
      new GetPersonalizedRankingCommand(getPersonalizedRankingParam),
    );
    console.log("Success!", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------

## 在個人化排名中包含項目中繼資料
<a name="getting-personalized-ranking-with-metadata-sdk"></a>

如果您在行銷活動的建議中啟用中繼資料，您可以指定要包含在回應中的項目資料集中繼資料欄。如需啟用中繼資料的詳細資訊，請參閱 [建議中的項目中繼資料](campaigns.md#create-campaign-return-metadata)。

下列程式碼範例示範如何在個人化排名的請求中指定中繼資料欄。

```
import boto3

personalizeRt = boto3.client('personalize-runtime')

response = personalizeRt.get_personalized_ranking(
    campaignArn = "Campaign arn",
    userId = "UserID",
    inputList = ['ItemID1','ItemID2'],
    metadataColumns = {
      "ITEMS": ['columnNameA','columnNameB']
    }
)

print("Personalized Ranking")
for item in response['personalizedRanking']:
    print (item['itemId'])
    print (item['metadata'])
```

## 使用內容中繼資料取得個人化排名
<a name="personalized-ranking-contextual-metadata-example"></a>

使用下面的程式碼來根據情境中繼資料取得個人化排名。對於 `context`，針對每個索引鍵/值對，提供中繼資料欄位作為索引鍵，而內容資料作為值。在下列範例程式碼中，金鑰為 `DEVICE`，值為 `mobile phone`。將這些值和 `Campaign ARN`和 `User ID`取代為您自己的值。也`inputList`請變更為您用來訓練解決方案的資料中的項目 IDs 清單。Amazon Personalize 會考慮使用者最感興趣的清單中的第一個項目。

```
import boto3

personalizeRt = boto3.client('personalize-runtime')

response = personalizeRt.get_personalized_ranking(
    campaignArn = "Campaign ARN",
    userId = "User ID",
    inputList = ['ItemID1', 'ItemID2'],
    context = {
      'DEVICE': 'mobile phone'
    }
)

print("Personalized Ranking")
for item in response['personalizedRanking']:
  print(item['itemId'])
```