質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

1回答

1657閲覧

【C#】Googleカスタム検索APIのStatus Codeを取得したい

masu_san

総合スコア2

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2021/12/28 01:48

前提・実現したいこと

C#のライブラリGoogle.Apis.CustomSearch.v1を使って
APIを叩いたときのStatus Codeを取得したい。

当方、c#を学習して1ヶ月の初心者なので
記載に不備があるかもしれません。

ご指摘いただいた箇所はすぐに補足しますので
ご指導ご鞭撻のほどよろしくお願いいたします。

該当のソースコード

APIを叩く部分を記載します。

csharp

1using Google.Apis.CustomSearchAPI.v1; 2using Google.Apis.CustomSearchAPI.v1.Data; 3 4~中略~ 5 6CustomSearchAPIService customSearchService = 7 new CustomSearchAPIService(new Google.Apis.Services.BaseClientService.Initializer() 8 { ApiKey = "API_KEY" }); 9 CseResource.ListRequest listRequest = 10 new CseResource.ListRequest(customSearchService); 11 12listRequest.Cx = "検索エンジンID"; 13listRequest.Q = "検索クエリ"; 14 15// 検索を実行 16Search search = listRequest.Execute();

試したこと

「Google Custom Search API StatusCode」
「Google.Apis.CustomSearchAPI.v1 statuscode」
「c# googleカスタム検索 ステータスコード」等のワードで
Googleの公式ドキュメントや日本語、英語のページも調べてみましたが
このライブラリを使ってStatusCodeを取得する方法がわかりませんでした。

HttpRequestを使って以下のようにAPIを叩き、
StatusCodeを取得できる事は理解しています。

csharp

1var client = new HttpClient(); 2 3// response.StatusCodeで取得できる 4var response = await client.GetAsync("https://customsearch.googleapis.com/customsearch/v1?cx={検索エンジンID}&q={検索クエリ}&key={API_KEY}");

これを使えばやりたいことが実現できることはわかっているのですが

この部分以外のソースコードを
Google.Apis.CustomSearch.v1を使う前提で書いていて

statuscodeが取得できないこと以外に問題はないので
極力、大きな変更をせずにプログラムを完成させたいと思っています。

補足情報(FW/ツールのバージョンなど)

Windows 10 Pro
Visual Studio 2022
.NET Framework 4.8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2021/12/28 14:41

なぜStatusCodeが必要なんでしょう? 専用のライブラリですからurlの間違い等はおきないはずですし、成功して当たり前で失敗したときは例外が返ってくるんではないでしょうか?(未確認) サーバーエラーの例外には、StatusCodeが入っているかもしれません。 ざっとissueは見てみましたが、ズバリなものはなさそうでした。 拡張ポイントはいろいろありそうなので、取得は可能だろうとは思います(わたしはちゃんとコードを追う気がしないのでやり方はわかりませんが^^; [googleapis/google-api-dotnet-client: Google APIs Client Library for .NET](https://github.com/googleapis/google-api-dotnet-client
masu_san

2021/12/28 23:57

ご回答ありがとうございます。 StatusCodeに応じて動作を切り替えたかったのです。 > 拡張ポイントはいろいろありそうなので、取得は可能だろうとは思います(わたしはちゃんとコードを追う気がしないのでやり方はわかりませんが^^; もう一度やってみようということでライブラリのコードを追って、試し試しやってみたら、うまくStatusCodeの取得ができました。 もう一度トライするきっかけを頂きありがとうございました。
TN8001

2021/12/29 03:46

それはよかったです^^ では閲覧者のためにもその方法を自己回答していただき、それをベストアンサーにして質問を解決済みにしてください。 [質問をした後に自己解決してしまった | ヘルプ|teratail(テラテイル)](https://teratail.com/help#resolve-myself
masu_san

2021/12/29 05:03

はい、お世話になりました。
guest

回答1

0

自己解決

CseResource.ListRequest.Execute()のコードにて、AggregateException型で
例外が投げられることがわかり、Messageプロパティを確認してみると以下の表示。

ハンドルされていない例外: Google.GoogleApiException: Google.Apis.Requests.RequestError

具体的な解決策として、GoogleApiException型で例外をcatchして
StatusCodeプロパティを取得することで目的が達成できました。

csharp

1 2using Google; 3using Google.Apis.CustomSearchAPI.v1; 4using Google.Apis.CustomSearchAPI.v1.Data; 5 6~中略~ 7 8CustomSearchAPIService customSearchService = new CustomSearchAPIService(new 9 Google.Apis.Services.BaseClientService.Initializer() 10 { ApiKey = "API_KEY" }); 11 12CseResource.ListRequest listRequest = new CseResource.ListRequest(customSearchService); 13 14listRequest.Cx = "検索エンジンID"; 15listRequest.Q = "検索クエリ"; 16 17 18try 19{ 20 // 検索を実行 21 Search search = listRequest.Execute(); 22} 23catch(GoogleApiException e) 24{ 25 Console.WriteLine($"statuscode:{e.HttpStatusCode}"); 26}

投稿2021/12/29 05:04

masu_san

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問