Office365-rest-python-client: 파일 이름(ν™•μž₯자 포함)을 κ²€μƒ‰ν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

에 λ§Œλ“  2020λ…„ 06μ›” 17일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: vgrem/Office365-REST-Python-Client

쒋은 μ˜€ν›„μ—μš”,

μ €λŠ” λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ 일뢀 ν•­λͺ©μ„ μ°Ύμ•„ λ‹€μš΄λ‘œλ“œν•  수 μžˆλŠ” μž¬κ·€ 루프에 λŒ€ν•΄ μž‘μ—…ν•΄ μ™”μŠ΅λ‹ˆλ‹€.

μ§€κΈˆκΉŒμ§€ λͺ¨λ“  μš”μ†Œλ₯Ό ​​얻을 수 μžˆμ—ˆμ§€λ§Œ μš”μ†Œμ˜ 속성에 "이름" ν•„λ“œκ°€ λ‚˜νƒ€λ‚˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ‹€μš΄λ‘œλ“œν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μš”μ†Œλ₯Ό 파일둜 λ³€ν™˜ν•  λ•Œ 속성이 null({})μ΄λ―€λ‘œ 이름을 κ°€μ Έμ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€.

file.dowload() λ©”μ„œλ“œλŠ” νŒŒμΌμ„ μš”κ΅¬ν•˜κ³  파일의 ν˜„μž¬ ν™•μž₯자λ₯Ό λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ— νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜λŠ” 것은 거의 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

μ–΄λ–€ μ œμ•ˆ?

λ‚΄κ°€ μ‚¬μš©ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

from office365.runtime.auth.ClientCredential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
from office365.sharepoint.camlQuery import CamlQuery

ctx = ClientContext.connect_with_credentials(site_url, ClientCredential(client_id, client_secret))
lib = ctx.web.lists.get_by_title("XXX")
caml_query = CamlQuery()
caml_query.ViewXml = """XXX"""

items = lib.get_items(caml_query)
ctx.load(lib)
ctx.execute_query()
for item in items:
    file = item.file
    with open(download_path, "wb") as local_file:
        file.download(local_file)
        ctx.execute_query()
        print("[Ok] file has been downloaded: {0}".format(download_path))

미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš”,

λ‚˜λŠ” λ‚΄ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆλ‹€.

ν•­λͺ© λͺ©λ‘ λ‚΄μ—μ„œ λ°˜λ³΅ν•œ ν›„ 각 νŒŒμΌμ— λŒ€ν•œ μ»¨ν…μŠ€νŠΈλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•˜λ©° 이름이 ν¬ν•¨λœ 파일의 속성을 κ²€μƒ‰ν•œ λ‹€μŒ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이것은 μ•„λž˜ λ‚΄ μ½”λ“œμž…λ‹ˆλ‹€.

client_id = "XXX"
client_secret = "XXX"
site_url = "XXX"
download_folder = r'C:\Users\yourname\sharepoint'


from office365.runtime.auth.ClientCredential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
from office365.sharepoint.camlQuery import CamlQuery


ctx = ClientContext.connect_with_credentials(site_url, ClientCredential(client_id, client_secret))
lib = ctx.web.lists.get_by_title("REO")
caml_query = CamlQuery()
caml_query.ViewXml = XXX
items = lib.get_items(caml_query)
ctx.load(items)
ctx.execute_query()
for item in items:
    file = item.file
    ctx.load(file)
    ctx.execute_query()
    file_name = "{0}".format(file.properties["Name"])
    download_path = download_folder + '//' + file_name
    with open(download_path, "wb") as local_file:
        file.download(local_file)
        ctx.execute_query()
        print("[Ok] file has been downloaded: {0}".format(download_path))

λͺ¨λ“  4 λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš”,

λ‚˜λŠ” λ‚΄ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆλ‹€.

ν•­λͺ© λͺ©λ‘ λ‚΄μ—μ„œ λ°˜λ³΅ν•œ ν›„ 각 νŒŒμΌμ— λŒ€ν•œ μ»¨ν…μŠ€νŠΈλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•˜λ©° 이름이 ν¬ν•¨λœ 파일의 속성을 κ²€μƒ‰ν•œ λ‹€μŒ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이것은 μ•„λž˜ λ‚΄ μ½”λ“œμž…λ‹ˆλ‹€.

client_id = "XXX"
client_secret = "XXX"
site_url = "XXX"
download_folder = r'C:\Users\yourname\sharepoint'


from office365.runtime.auth.ClientCredential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
from office365.sharepoint.camlQuery import CamlQuery


ctx = ClientContext.connect_with_credentials(site_url, ClientCredential(client_id, client_secret))
lib = ctx.web.lists.get_by_title("REO")
caml_query = CamlQuery()
caml_query.ViewXml = XXX
items = lib.get_items(caml_query)
ctx.load(items)
ctx.execute_query()
for item in items:
    file = item.file
    ctx.load(file)
    ctx.execute_query()
    file_name = "{0}".format(file.properties["Name"])
    download_path = download_folder + '//' + file_name
    with open(download_path, "wb") as local_file:
        file.download(local_file)
        ctx.execute_query()
        print("[Ok] file has been downloaded: {0}".format(download_path))

@pobs93 μ†ŒμŠ€ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ Sharepoint λͺ©λ‘μ—μ„œ 첨뢀 νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜λ €κ³  ν•©λ‹ˆλ‹€.
μ–΄λ–€ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν• μ§€ λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ— 이 쀄에 주석을 λ‹¬μ•˜μŠ΅λ‹ˆλ‹€.
caml_query.ViewXml = XXX
κ·ΈλŸ¬λ‚˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ ctx.execute_query() ν–‰μ—μ„œ μ•„λž˜ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
TypeError: CamlQuery μœ ν˜•μ˜ κ°œμ²΄λŠ” JSON 직렬화 κ°€λŠ₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ €λŠ” 이런 μœ ν˜•μ˜ API에 μ΅μˆ™ν•˜μ§€ μ•Šμ•„μ„œ λͺ…ν™•ν•˜κ²Œ μ„€λͺ…ν•  수 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€.
TKS

@pobs93 첨뢀 νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜λ €λŠ” λͺ©λ‘μ— λŒ€ν•œ μ„€λͺ…을 μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.
그것듀은 λ‚΄κ°€ 가지고 μžˆλŠ” λͺ©λ‘μ˜ DEFAULT 킀이며 여기에 첨뢀 파일의 URL이 ν‘œμ‹œλ˜μ§€ μ•Šμ§€λ§Œ 거기에 μžˆμŠ΅λ‹ˆλ‹€(μ²¨λΆ€λœ κ·Έλ¦Ό μ°Έμ‘°).
{'파일 μ‹œμŠ€ν…œ 개체 μœ ν˜•': -,
'ID': -,
'ServerRedirectedEmbedUri': μ—†μŒ,
'ServerRedirectedEmbedUrl': '',
'μ½˜ν…μΈ  μœ ν˜• ID': -,
'제λͺ©': -,
'ComplianceAssetId': μ—†μŒ,
'ID': -,
'μˆ˜μ •λ¨': -,
'λ§Œλ“€μ–΄μ§„': -,
'μ €μž ID': 12,
'EditorId': 12,
'OData__UIVersionString': '1.0',
'μ²¨λΆ€νŒŒμΌ': 사싀,
'GUID': -}

sp_attachment

λ‹€μŒ μ˜ˆλŠ” λͺ©λ‘ ν•­λͺ©μ— λŒ€ν•œ _file name_ 및 _file url_을 κ²€μƒ‰ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.


ctx = ClientContext(settings['url']).with_credentials(client_creds)

lib = ctx.web.lists.get_by_title("Documents")
items = lib.items
ctx.load(items, ["ID", "FileLeafRef", "FileRef"])

ctx.execute_query()
for item in items:
    print(f"FileRef: {item.properties['FileRef']}") 

μ–΄λ””

  • FileLeafRef - ListItemκ³Ό μ—°κ²°λœ 파일 λ…Έλ“œμ˜ μ„œλ²„ μƒλŒ€ URL에 λŒ€ν•œ 정보가 ν¬ν•¨λœ ν•„λ“œλ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€.

  • FileRef - ListItem의 μ„œλ²„ μƒλŒ€ URL에 λŒ€ν•œ 정보가 ν¬ν•¨λœ ν•„λ“œλ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰