1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

BOXのPythonSDKを使うとフォルダ内リスト取得APIのlimitが効かない

Last updated at Posted at 2021-08-05

頼まれてBOX APIを使った簡単なプログラムを作ったんですが、そのときに???な事態が起こったんでメモ。

環境

  • Python 3.9.6
  • boxsdk 2.12.1

起こったこと

PythonSDKを使って、指定フォルダの中身を一覧化してexcel出力したい。
なので、↓このAPIを使うことにした。
https://ja.developer.box.com/reference/get-folders-id-items/

from boxsdk import OAuth2, Client
import pandas as pd
import numpy

CLIENT_ID = 'xxxxxxxxxxxxxxxxxxxxxxxx'
CLIENT_SECRET = 'yyyyyyyyyyyyyyyyyyyyyyyyy'

access_token = 'aaaaaaaaaaaaaaaaaaaaa' #あらかじめ取得しておいたtoken

oauth = OAuth2(
    client_id = CLIENT_ID,
    client_secret = CLIENT_SECRET,
    access_token=access_token
)

client = Client(oauth)

items = client.folder(folder_id=0).get_items(limit=1,offset=2,sort="name")
list_in_folder = []
for item in items:
    list_in_folder.append([format(item.type.capitalize()), item.name])

df = pd.DataFrame(list_in_folder)

df.to_excel('list.xlsx')

しかしいざSDKを使ってlimit, offsetを指定しても
「offset位置から残り全部を取ってくる」挙動になってしまい、limit指定が効いてない様子だった。

結論

公式への質問で指摘してるのがあった。
https://github.com/box/box-python-sdk/issues/366

これによると、APIに対してのlimit指定はできない。offset位置から全部取ってくる。
取ってきたうえでlimit指定した分だけプログラム上でページングできるみたいなことが書いてある。(多分)

ええ~~~~紛らわしい。

試しにcurlでAPI自体を叩いてみると期待通りの動きをしたので、SDKを使用せずAPIに直でアクセスするように修正した。

import pandas as pd
import requests

access_token = 'aaaaaaaaaaaaaaaaaaaaa' #あらかじめ取得しておいたtoken

url = "https://api.box.com/2.0/folders/0/items"
data = {"limit": "1", "offset":"2", "sort":"name"}
headers = {'Authorization': 'Bearer {}'.format(access_token)}

r = requests.get(url, headers=headers, params=data)
print('ステータスコード:{}'.format(r.status_code))

json_data = r.json();
items = json_data['entries']

print('総ファイル数:{}'.format(json_data['total_count']))

list_in_folder = []
for item in items:
    list_in_folder.append([item['type'], item['name']])

df = pd.DataFrame(list_in_folder)
df.to_excel('list.xlsx')
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?