如何使用 ruby 将目录文件上传到 Azure 认知服务?

How to upload a catalog file to azure cognitive service with ruby?

我想将目录文件上传到推荐 api(使用 ruby 语言的 Azure 认知服务。

使用 C# 我将得到下一个代码(摘自 https://github.com/Microsoft/Cognitive-Recommendations-Windows/blob/master/Sample/RecommendationsApiWrapper.cs):

    public CatalogImportStats UploadCatalog(string modelId, string catalogFilePath, string catalogDisplayName)
    {
        Console.WriteLine("Uploading " + catalogDisplayName + " ...");
        string uri = BaseUri + "/models/" + modelId + "/catalog?catalogDisplayName=" + catalogDisplayName;
        using (var filestream = new FileStream(catalogFilePath, FileMode.Open, FileAccess.Read))
        {
            var response = _httpClient.PostAsync(uri, new StreamContent(filestream)).Result;

            if (!response.IsSuccessStatusCode)
            {
                throw new Exception(
                    String.Format("Error {0}: Failed to import catalog items {1}, for model {2} \n reason {3}",
                        response.StatusCode, catalogFilePath, modelId, ExtractErrorInfo(response)));
            }

            var jsonString = ExtractReponse(response);
            var catalogImportStats = JsonConvert.DeserializeObject<CatalogImportStats>(jsonString);
            return catalogImportStats;
        }

如何使用 ruby 和 http 客户端将目录文件上传到认知服务?。我需要一个基本的示例代码。

谢谢

我在这里上传了一个样本:https://github.com/miparnisari/ruby-cognitive-services

但要点是:

require 'net/http'
require 'IO/console'

class RecommendationsClient
    def initialize(subscription_key, region)
        @base_url="https://#{region}.api.cognitive.microsoft.com/recommendations/v4.0"
        @subscription_key=subscription_key
    end

    def upload_catalog(model_id, catalog_display_name, catalog_path)
        uri = URI("#{@base_url}/models/#{model_id}/catalog?catalogDisplayName=#{catalog_display_name}")
        request = Net::HTTP::Post.new(uri.request_uri)
        request['Content-Type'] = 'application/octet-stream'
        request['Ocp-Apim-Subscription-Key'] = "#{@subscription_key}"
        request.body = IO.binread(catalog_path)

        response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
            http.request(request)
        end
        return response.body
    end
end

然后:

r = RecommendationsClient.new("your_key_here", "westus")    
response = r.upload_catalog('1', 'catalog', 'books_catalog.txt')
puts response