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

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

ただいまの
回答率

90.01%

ConoHa APIを使用してドメイン一覧を取得、表示したい。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 744

wakuwaya

score 9

ConoHa APIを使用してドメイン一覧を取得しようとしたのですが取得した結果何も表示されません。

該当のソースコード

    function getAnthToken() {
        //トークン取得
        $url = "https://identity.tyo1.conoha.io/v2.0/tokens";

        $headers = array(
            "Accept: application/json"
        );

        $request = array(
            "auth" => array(
                "passwordCredentials" => array(
                    "username" => '******', 
                    "password" => '******'
                )
            ),
            "tenantId" => "******"
        );
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($request));
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        $token_result = curl_exec($ch);
        $token = json_decode($token_result);

        curl_close($ch);

        return $token -> access -> token -> id;
    }

    function getDomainLists($token_id) {
        //ドメイン一覧取得
        $url = "https://dns-service.tyo1.conoha.io/v1/domains";
        $header = array(
            "Accept: application/json",
            "X-Auth-Token: {$token_id}"
        );

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        $domain_result = curl_exec($ch);
        $domain = json_decode($domain_result);
        var_dump($domain);
        curl_close($ch);
    }

    $token = getAnthToken();
    getDomainLists($token);

getAnthToken()を実行した時点ではトークンIDを取得できており
getDomainLists()を実行してもエラーは表示されませんが、一覧も表示されません。

getDomainLists()の中でどこかが間違っていると思うのですがどこが違っているかがわかりません。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • CHERRY

    2017/08/19 12:53

    ConoHaコントロールパネルで、 DNS は、表示されていますか?

    キャンセル

  • wakuwaya

    2017/08/19 14:39 編集

    ありがとうございます。
    確認しましたところ表示されていました。

    また、curl_getinfoを使用してCURLINFO_HTTP_CODEを表示したところ
    「401 – Access Denied」が取得されていました。

    今回の事象に関して関係あるでしょうか。

    キャンセル

  • CHERRY

    2017/08/19 14:51 編集

    401 だと 認証エラーですね。 まずは、 https://www.conoha.jp/docs/paas-dns-list-domains.html のサンプルのように コマンドラインから 「 curl --include https://dns-service.tyo1.conoha.io/v1/domains -X GET -H "Accept: application/json" -H "Content-Type: application/json" -H "X-Auth-Token: トークン" 」のように 実行したら取得できますか?

    キャンセル

  • wakuwaya

    2017/08/19 15:41

    ありがとうございます。curlのコマンドラインからはドメイン一覧を取得したら取得できました。考えられるのはトークンが有効になるまでには時間がかかることなのですが、こういうことはあるのでしょうか。

    キャンセル

回答 1

checkベストアンサー

0

2箇所の修正が必要なようです。

https://www.conoha.jp/docs/paas-dns-list-domains.html

{
  "auth": {
    "passwordCredentials": {
      "username": "ConoHa",
      "password": "paSSword123456#$%"
    },
    "tenantId": "487727e3921d44e3bfe7ebb337bf085e"
  }
}


上記のJSONリクエストを送付するためにはgetAnthToken関数を例えば下記のように修正します。
微妙な違いですが、そのためにテナントIDを認識できていないようです。
サンプルのリクエストと見比べてみてください。

        $request = array(
            "auth" => array(
                "passwordCredentials" => array(
                    "username" => '******', 
                    "password" => '******'
                ),
            "tenantId" => "******"
            ),
        );
  • 修正前
{"auth":{"passwordCredentials":{"username":"******","password":"******"}},"tenantId":"******"}
  • 修正後
{"auth":{"passwordCredentials":{"username":"******","password":"******"},"tenantId":"******"}}

もう1点は細かいところで転記ミスかもしれませんが、getDomainLists関数内の変数名が$headerと$headersで異なっています。

$headers = array(
            "Accept: application/json",
            "X-Auth-Token: {$token_id}"
        );

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/21 21:00

    回答ありがとうございます。

    記載箇所を修正したところドメイン一覧を取得することができました。
    ありがとうございました。

    getDomainLists関数内の記載の件もありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる