Office365-rest-python-client: Sem saída de folder.files / sem erro

Criado em 13 mar. 2019  ·  12Comentários  ·  Fonte: vgrem/Office365-REST-Python-Client

Oi,

meu objetivo é imprimir o conteúdo de uma lista / biblioteca de documentos do site do sharepoint
e estou tentando descobrir por que não estou obtendo nenhuma saída / nenhum erro.

Meu url https://my.jci.com/sites/FRAReporting/Shared%20Documents/Forms/AllItems.aspx
aponta para Documentos contendo 2 pastas e 1 arquivo, mas não consigo ver executando este script.
Alterar list_object de "Documentos compartilhados" para títulos alternativos não faz diferença.

Estou perdendo algo óbvio aqui, por favor? Qualquer ajuda seria muito apreciada.

Obrigada.

Marcel

de office365.runtime.auth.authentication_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext

app_settings = {
'url': ' https://my.jci.com/sites/FRAReporting/Shared%20Documents/Forms/AllItems.aspx ',
'client_id': 'f638a093-aa8f-48c7-a4e6-998d7d1ee388',
'client_secret': 'xysjblahblah',
}

if __name__ == '__main__':
context_auth = AuthenticationContext (url = app_settings ['url'])
if context_auth.acquire_token_for_app (client_id = app_settings ['client_id'], client_secret = app_settings ['client_secret']):

    ctx = ClientContext(app_settings['url'], context_auth)

    list_object = ctx.web.lists.get_by_title("Shared Documents")
#list_object = ctx.web.lists.get_by_title("Documents")
#list_object = ctx.web.lists.get_by_title("FRAReporting")

    folder = list_object.root_folder        
    ctx.load(folder)
    ctx.execute_query()

    files = folder.files
    ctx.load(files)
    ctx.execute_query()

    for myfile in files:
        print("File name: {0}".format(myfile.properties["Name"]))

Todos 12 comentários

btw usando Office365-REST-Python-Client (2.1.1) e python 3.6.4

Saudações!

Infelizmente, não consigo identificar nenhum problema com o exemplo fornecido, tudo parece bom para mim.

Pela descrição abaixo:
_ponta para documentos contendo 2 pastas e 1 arquivo_

pode ser que os arquivos não estejam armazenados na pasta raiz, mas sim na subpasta?

De qualquer forma, você poderia tentar essa abordagem apenas para ter certeza de que os itens serão devolvidos ou não?

list_obj = context.web.lists.get_by_title(list_title)
qry = CamlQuery.create_all_items_query()
items = list_obj.get_items(qry)
context.load(items)
context.execute_query()
for cur_item in items:
    print("File name: {0}".format(cur_item.properties["Title"]))

image

Oi,
Eu obtenho o seguinte ao executar seu código:

PS C: UsersfooAppDataLocalProgramsPythonPython36ScriptsSharePoint> .... python.exe .sharePoint_office365_test4.py
Traceback (última chamada mais recente):
Arquivo ".sharePoint_office365_test4.py", linha 36, ​​em
ctx.execute_query ()
Arquivo "C: UsersfooAppDataLocalProgramsPythonPython36libsite-packagesoffice365runtimeclient_runtime_context.py", linha 36, ​​em execute_query
self.pending_request.execute_query ()
Arquivo "C: UsersfooAppDataLocalProgramsPythonPython36libsite-packagesoffice365runtimeclient_request.py", linha 32, em execute_query
return self.execute_pending_queries ()
Arquivo "C: UsersfooAppDataLocalProgramsPythonPython36libsite-packagesoffice365runtimeclient_request.py", linha 38, em execute_pending_queries
resposta = self.execute_request_direct (pedido)
Arquivo "C: UsersfooAppDataLocalProgramsPythonPython36libsite-packagesoffice365runtimeclient_request.py", linha 109, em execute_request_direct
self.context.ensure_form_digest (request_options)
Arquivo "C: UsersfooAppDataLocalProgramsPythonPython36libsite-packagesoffice365sharepointclient_context.py", linha 27, em garantir_form_digest
self.request_form_digest ()
Arquivo "C: UsersfooAppDataLocalProgramsPythonPython36libsite-packagesoffice365sharepointclient_context.py", linha 39, em request_form_digest
carga útil = response.json ()
Arquivo "C: UsersfooAppDataLocalProgramsPythonPython36libsite-packagesrequestsmodels.py", linha 897, em json
retornar complexjson.loads (self.text, ** kwargs)
Arquivo "C: UsersfooAppDataLocalProgramsPythonPython36libjson__init __. Py", linha 354, em carregamentos
return _default_decoder.decode (s)
Arquivo "C: UsersfooAppDataLocalProgramsPythonPython36libjsondecoder.py", linha 339, em decodificação
obj, end = self.raw_decode (s, idx = _w (s, 0) .end ())
Arquivo "C: UsersfooAppDataLocalProgramsPythonPython36libjsondecoder.py", linha 362, em raw_decode
elevar JSONDecodeError ("Esperando valor", s, err.value) de Nenhum
json.decoder.JSONDecodeError: Valor esperado: linha 2 coluna 1 (caracter 2)
PS C: UsersfooAppDataLocalProgramsPythonPython36ScriptsSharePoint>

Quando imprimo a string na exceção raw_decode, fica assim, consulte o anexo

Muito obrigado pelo seu tempo.
Marcel

Ao revisar pela segunda vez (e olhando para a captura de tela fornecida, obrigado por isso!), Percebi que o url fornecido não parece ser válido:

app_settings = {
'url': 'https://my.jci.com/sites/FRAReporting/Shared%20Documents/Forms/AllItems.aspx',
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
         needs to be site url  

}

O URL fornecido corresponde a _ Url absoluto da página de visualização da biblioteca_, mas o que realmente ClientContext esperava é siteUrl , portanto, em vez de:

https://my.jci.com/sites/FRAReporting/Shared%20Documents/Forms/AllItems.aspx

por favor, experimente:

https://my.jci.com/sites/FRAReporting/

Você está absolutamente certo, era isso.
Você fez meu dia, não posso te agradecer o suficiente.
m.

Executar seu script agora imprime cerca de 15 linhas:

C: UsersfooAppDataLocalProgramsPythonPython36ScriptsSharePoint> .... python.exe .sharePoint_office365_test4.
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum
Nome do arquivo: Nenhum

durante a execução do meu script original (quero dizer, o seu :), obtenho o resultado esperado:
Nome do arquivo: Document.docx
Nome do arquivo: access_denied.txt

Minha pergunta é: como posso listar todos os arquivos na pasta "TEST" do SS acima, por exemplo. É exatamente isso que estou tentando alcançar.

Não sei se poderia explicar exatamente o meu problema. Assim como você está imprimindo com sucesso seus arquivos na raiz (ou como quer que seja chamado; Documentos):

Nome do arquivo: Document.docx
Nome do arquivo: access_denied.txt

Eu também posso fazer isso. Mas, em vez disso, deseja obter a lista de arquivos nas pastas.

Esta página foi útil?
0 / 5 - 0 avaliações