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

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

新規登録して質問してみよう
ただいま回答率
85.50%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

2960閲覧

[conoha api]python3でjsonデータをリクエスト

退会済みユーザー

退会済みユーザー

総合スコア0

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/03/30 04:47

編集2018/03/30 05:10

サーバーを提供しているconohaでAPIを利用しようと試みておりますが躓いております。
やりたいことはAPIを利用したサーバーの追加です。調べたところ下の手順で作るものだと思われます。
1.トークン発行 https://www.conoha.jp/docs/identity-post_tokens.html
2. VM追加 https://www.conoha.jp/docs/compute-create_vm.html

はじめにトークンの発行ですがPOSTでJSONの送り方を調べ下記サイトを参考にして下のようなコードを書きました。
http://takuya-1st.hatenablog.jp/entry/2017/03/08/021706
headers={'Content-type':'application/json'}の意味は分かりませんがとりあえず実行したところ、
urllib.error http.Error 405 Not Allowedとエラーがでました。初心者なので何か基本的なことが間違えているかもしれないです。
また、トークン発行した後どのような作業をして2のVM追加に至るのか少しでいいので道筋を教えていただけると幸いです。

import requests
import urllib.parse
import urllib.request

url="https://identity.tyo1.conoha.io/v2.0"
method="POST"
headers={
'Content-type':'application/json'
}

json_str="""{"auth": {
"passwordcredentials": {
"username": "aaa",
"password": "bbb"
},
"tenantid": "ccc"
}
}"""

req = urllib.request.Request(url=url,headers=headers, data=json_str.encode('utf-8'))
f = urllib.request.urlopen(req)
print(f.read().decode('utf-8'))

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

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

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

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

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

guest

回答2

0

ベストアンサー

このAPIを使った事はありませんが、トークン発行 - Identity API v2.0のページを見る限りでは、メソッドがGETではなくPOST、エンドポイントも違います。

※エンドポイントURLにつきましては、お客様環境によって異なりますので、コントロールパネルにてご確認の上ご利用ください。

以下はrequestsモジュールでjsonデータを送るサンプルコードです。

Python

1# -*- coding: utf8 -*- 2import requests 3 4 5def post_content(json_data: dict): 6 # identity.tyo1.conoha.io ←送り先はここでいいのかコントロールパネルで確認してください。 7 url = 'https://identity.tyo1.conoha.io/v2.0/tokens' 8 return requests.post(url=url, json=json_data) 9 10 11def main() -> None: 12 json_data = {"auth": { 13 "passwordCredentials": { 14 "username": "aaa", 15 "password": "bbb" 16 }, 17 "tenantId": "ccc" 18 }} 19 res = post_content(json_data) 20 # ※ステータスコードが200以外ならエラー処理を行うこと。 21 print(res.status_code) 22 print(res.json()) 23 24 25if __name__ == '__main__': 26 main() 27

投稿2018/03/30 05:43

編集2018/03/30 06:35
umyu

総合スコア5846

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

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

退会済みユーザー

退会済みユーザー

2018/03/30 06:15

回答ありがとうございます。urllibを使わない方法ですね。大変参考になります。 APIを過去に使用したことがないのでコード見てゆっくり勉強してみようかと思います。 一つ疑問点があります。Request URLの読み方が分からないです。 1行目はAPIのバージョンで2行目は identity serviceのエンドポントの文末に/v2.0/tokensを加えたURLにPOSTをしてください。という意味合いなのでしょうか。 Request URL identity API v2.0 POST /v2.0/tokens
umyu

2018/03/30 06:31 編集

>Anacondaaaさんへ はいそうです、参考ページのExampleを見る限りではそうかと
退会済みユーザー

退会済みユーザー

2018/03/30 06:34

貴重な時間を使い回答していただき感謝します。精進します(≧▽≦)
退会済みユーザー

退会済みユーザー

2018/03/30 13:31

requestsを用いる方法で第一段階のトークンの発行できました。ありがとうございます(≧▽≦) こちらのドキュメントにはrequest jsonではなくrequest parameterも載っていたので勉強のため parameterを使ってみたのですが400badrequestとなりました><よろしければ不適切な所ご指摘いただけないでしょうか。 import requests import json def main() -> None: url = 'https://identity.tyo1.conoha.io/v2.0/tokens' data={"username": "aaa", "password": "bbb","tenantId":"ccc"} res = requests.post(url=url, params=data) print(res.status_code) print(res.json()) if __name__ == '__main__': main()
umyu

2018/03/30 13:46 編集

>Anacondaaaさんへ こちらのドキュメントってどちらでしょ・・。 この質問と回答にparamsオプション付きのドキュメントは一切存在しないのですが・・ https://ja.stackoverflow.com/questions/42768 マルチポストしてらっしゃるみたいなので、マルチポスト先の方に回答してもらってくださいな。
guest

0

とりあえずひと目見てわかるのは、json_strがpythonの辞書型になっちゃってることなので、文字列にしてください。
全体を文字列としてクオートしないといけないので、

python

1# 方法1 2json_str = '{"auth": {"passwordcredentials": {"username": "aaa","password": "bbb"},"tenantid": "ccc"}}' 3 4# 方法2 5json_str= """{"auth": { 6"passwordcredentials": { 7"username": "aaa", 8"password": "bbb" 9}, 10"tenantid": "ccc" 11} 12}"""

このように書き換えてください。

投稿2018/03/30 05:03

hayataka2049

総合スコア30933

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

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

退会済みユーザー

退会済みユーザー

2018/03/30 05:09

ありがとうございます。エラーの内容が変わりました;;; urllib.error http.Error 405 Not Allowed
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問