【python】requestsでGET,POST,UPDATE,DELETEをする【Pixela】

Python

APIを使用してデータの取得、変更をするにCRUDがありますが、pythonのrequestsを使用してこれらを試してみます。

非常に簡単に言うとGETはサーバーからデータを取得、POSTはこちらからサーバーへデータを送る、UPDATEは削除、DELETEは削除です。文字通りですね。

この記事はUdemyのpython講座を参照しています。

100 Days of Code: The Complete Python Pro Bootcamp for 2023
Master Python by building 100 projects in 100 days. Learn data science, automation, build websites, games and apps!

使用するサイト

pixelaを使用します。

Pixela | あなたの頑張りや継続を記録し、育てたい。そのすべてを、APIで。
Pixela, あなたの頑張りや継続を記録し、育てたい。そのすべてを、APIで。 | Pixela is the API service. With this service, you can get a GitHub like graph that expresses the degree of your daily...

githubのように日々の習慣を入力すると、色の濃淡でどれだけ頑張ったかが一目でわかります。無料APIサービスです。

使い方の欄からその通りに進めていけば、実際にグラフを作成することができます。今回はグラフを作成したところから、進めていきたいと思います。

GET-データの取得

まずは作成したグラフを確認しておきましょう。APIドキュメントはこちら

https://docs.pixe.la/entry/get-graph

endpointというのがこのAPIを利用するためのURLです。<>の中身はユーザーに応じて変更、Request Headerの欄には与えられるパラメータが記載されています。X-USER-TOKENは[required]なので必須ということですね。

コード内のresponse.textはコードが問題なく完了できているかどうかを見ています。

import requests

pixela_endpoint = "https://pixe.la/v1/users"
get_endpoint = "{}/{}/graphs".format(pixela_endpoint, USERNAME)

headers = {
    "X-USER-TOKEN": TOKEN,
}

response = requests.get(get_endpoint, headers=headers)
print(response.text)

# {"graphs":[{"id":"graph1","name":"Cycling Graph","unit":"Km","type":"float","color":"ajisai","timezone":"","purgeCacheURLs":null,"selfSufficient":"none","isSecret":false,"publishOptionalData":false}]}

作成したグラフの情報を取得することができました。APIによってはgetメソッド内でparamを指定し、特定の情報を取得することも多いです。

POST-データを作成

こちらが作成したグラフを可視化したものです。ここにPOSTを用いてデータを格納します。

https://docs.pixe.la/entry/post-pixel

先ほどのHeaderに加え、Bodyにも[required]があることがわかります。日付と、どれだけ行ったかの量ですね。

コードにすると

import requests
from datetime import datetime

pixela_endpoint = "https://pixe.la/v1/users"
record_endpoint = "{}/{}/graphs/{}".format(pixela_endpoint, USERNAME, GRAPH_ID)

today = datetime.now()

headers = {
    "X-USER-TOKEN": TOKEN,
}
record_config = {
    "date": today.strftime("%Y%m%d"),
    "quantity": input("How many kilometers did you cycle today? :"),
}

response = requests.post(url=record_endpoint, json=record_config, headers=headers)
print(response.text)

header情報と異なりbody情報はjson引数に与えています。

実行すると(15.8km走ったということにしました)

無事データが入りました!

UPDATE-データの更新

データの更新のために何日分かのデータを作成しておきました。

データを作成したのちに、昨日のデータ(4.1km)が少なすぎるのでずるして増やそうと思います。

https://docs.pixe.la/entry/put-pixel

変更したい日付をendpointに加え、その日のquantityを与えればよいようです。

update_day = datetime(year=2021, month=3, day=2).strftime("%Y%m%d")
update_endpoint = "{}/{}/graphs/{}/{}".format(pixela_endpoint, USERNAME, graphID, update_day)

update_config = {
    "quantity": "10.2",
}

response = requests.put(url=update_endpoint, json=update_config, headers=headers)
print(response.text)

昨日の走った距離が変更されました。

DELETE-データの削除

先ほどずるして更新した距離ですが、思い直して、いっそずるして増やすくらいなら消してしまうことにします。

https://docs.pixe.la/entry/delete-pixel

endpointに日付を入れて、TOKEN情報を入れればその日のデータを削除できるようです。

delete_day = datetime(year=2021, month=3, day=2).strftime("%Y%m%d")
delete_endpoint = "{}/{}/graphs/{}/{}".format(pixela_endpoint, USERNAME, graphID, delete_day)

response = requests.delete(url=delete_endpoint, headers=headers)
print(response.text)

削除できました。

コメント

タイトルとURLをコピーしました