Office365-rest-python-client: SharePointリストに関する情報にアクセスできません。リストリソースのURLが正しくないようです

作成日 2020年08月28日  ·  5コメント  ·  ソース: vgrem/Office365-REST-Python-Client

これが私が使っているものです。

site_url = "https://mycompany.sharepoint.com/sites/mysite/"
clientid = "12345"
clientsecret = "67890"
clientcredentials = ClientCredential(clientid, clientsecret)
ctx = ClientContext(site_url).with_credentials(clientcredentials)
target_list = "ListIWant"
list_object = ctx.web.lists.get_by_title(target_list)
items = list_object.get_items()
ctx.load(items)
ctx.execute_query()

すべてがエラーなしで実行されますが、最終的に私のlist_objectにはアイテムやフィールドがありません... list_objectのresource_urlを見ると、正しいURLではありません。 リスト名の前後に余分なバックスラッシュがあります。 スラッシュを削除してエッジアドレスバーにコピーすると、リストに関する情報を含むXMLファイルがダウンロードされますが、そのままでは機能しません...したがって、それがエラーの原因であると思います...しかし私はしませんtそれを修正する方法。

私はとても近くにいるような気がします...誰か助けてもらえますか?
example

question

全てのコメント5件

もうすぐです。
itemsオブジェクトのタイプはListItemCollectionです。
len(items)を試してみると、コレクション内のアイテムの量が返されるはずです
そして、これらの項目を列挙できるようになりました。

for item in items:
    print(item.properties)

各アイテムは、操作可能なタイプListItemた。

また、余分なバックスラッシュは、Python文字列の'をエスケープするためのものであり、これらは完全に正常です。

もうすぐです。
itemsオブジェクトのタイプはListItemCollectionです。
len(item)を試してみると、コレクション内のアイテムの量が返されるはずです
そして、これらの項目を列挙できるようになりました。

for item in items:
    print(item.properties)

各アイテムは、操作可能なタイプListItemた。

あなたの助けに感謝しますが、print(len(items))は0を返します

resource_urlに問題がない場合。 SharePointサイトに設定したアプリのアクセス許可に問題がある可能性がありますか? https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs (アクセス許可要求XMLの設定を含む)の指示に従いましたが、_layouts / 15に戻ると/appinv.aspxページでクライアントIDを確認すると、アクセス許可要求のXMLフィールドは常に空です...これを行うのはこれが初めてなので、それがどのように機能するかはわかりません。

私はxmlにこれらの設定を使用しています(そして私は明らかにアプリケーションを信頼することを選択します)。

   <AppPermissionRequests AllowAppOnlyPolicy="true">
   <AppPermissionRequest Scope="http://mycompany.sharepoint.com/sites/mysite" Right="FullControl" />
   </AppPermissionRequests>

これは、docs.microsoft.comで見つけた手順とは少し異なりますが、テナントではなく、自分のサイトへのアクセスを許可することしかできません。 その後、アプリは「サイトコレクションアプリのアクセス許可」に表示されるので、機能していると思います...しかし、appinv.aspxに戻ったときにxmlアクセス許可が表示されないという事実。

良い質問ですが、私の記憶では、許可の問題を扱っていたとき、それは非常に明確でした。
実際に承認されたアプリは_layouts/15/AppPrincipals.aspx
そして、appinvにxmlが表示されないのは正常です。

私の記憶が正しく機能する場合、私が使用したスコープはhttp://sharepoint/site/sitecollection
(編集:)チートシートは次のとおりです: https

postmanを介してAPIに接続しようとしましたか?

これが私の現在の接続で通訳から得たものです。

>>> items = ctx.web.lists.get_by_title('Events').items
>>> items
<office365.sharepoint.listitems.listItem_collection.ListItemCollection object at 0x10d064af0>
>>> len(items)
0
>>> ctx.load(items)
>>> ctx.execute_query()
>>> len(items)
2

ご挨拶、

もうすぐです。
itemsオブジェクトのタイプはListItemCollectionです。
len(items)を試してみると、コレクション内のアイテムの量が返されるはずです
そして、これらの項目を列挙できるようになりました。

for item in items:
    print(item.properties)

各アイテムは、操作可能なタイプListItemた。

また、余分なバックスラッシュは、Python文字列の'をエスケープするためのものであり、これらは完全に正常です。

同意し、実際、 OData URLを有効にするためにアポストロフィ文字をエスケープするには、追加の円記号が必須

このコメントは根本的な原因に光を当てているようです:

私はxmlにこれらの設定を使用しています(そして私は明らかにアプリケーションを信頼することを選択します)。

   <AppPermissionRequests AllowAppOnlyPolicy="true">
   <AppPermissionRequest Scope="http://mycompany.sharepoint.com/sites/mysite" Right="FullControl" />
   </AppPermissionRequests>

これは、docs.microsoft.comで見つけた手順とは少し異なりますが、テナントではなく、自分のサイトへのアクセスを許可することしかできません。 その後、アプリは「サイトコレクションアプリのアクセス許可」に表示されるので、機能していると思います...しかし、appinv.aspxに戻ったときにxmlアクセス許可が表示されないという事実。

提供されたスコープは_無効_に見えます: http://mycompany.sharepoint.com/sites/mysite

  • mycompany :代わりにsharepoint事前定義されたプレースホルダーである必要があります
  • sites/mysite同じで、_valid_プレースホルダーである必要があります(例: content/sitecollectionまたはcontent/sitecollection/web

したがって、解決策は、_valid_権限リクエストを提供することでアプリの権限です。例:

サイトコレクションごと:

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" />
</AppPermissionRequests>

ウェブごと:

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" />
</AppPermissionRequests>

_アクセス許可スコープ_のリストはアドインアクセス許可にあります。

最後になりましたが、アプリのプリンシパルを設定して権限を付与する方法を段階的に説明するwikiページもあります。

ありがとうございました! はい。 XML権限スコープが問題の根本的な原因であるようです!
私の最初のテストから、それは現在機能しているようです。

これは素晴らしい。 過去1年間、MS AccessでVBAスクリプトを使用して、SharePointリストを更新しています。 この部分を理解することで、すべてをPythonに移植することに一歩近づくことができます。

このページは役に立ちましたか?
0 / 5 - 0 評価