ããŒã ã§æ å ±å ±æããéãDropboxãå©çšããŠãã人ãå€ãã ãããããããããŸã«æ å ±ã確èªãããã ããªã®ã«ãDropboxãã€ã³ã¹ããŒã«ããã»ã©ã§ããªããšããå Žé¢ãããããããªãšãã«æŽ»çšãããã®ããAPIçµç±ã§ãã¡ã€ã«ãååŸããæ¹æ³ã ãä»åã¯ãPythonã䜿ã£ãŠDropboxã«ããExcelãã¡ã€ã«ãååŸããã¡ãŒã«éä¿¡ããããŒã«ãäœã£ãŠã¿ããã
Dropboxã¯äŸ¿å© - APIçµç±ã§ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ã§ãã
Dropboxãšã¯ãèšãããšç¥ããã¯ã©ãŠãã¹ãã¬ãŒãžãµãŒãã¹ã ããã¡ã€ã«ãã¯ã©ãŠãäžã«ä¿åããããšã§ãããœã³ã³ãã¹ããŒããã©ã³ãªã©ãæ§ã ãªããã€ã¹ããã¢ã¯ã»ã¹ã§ããã®ãç¹åŸŽã ããŸããããŒã ã§ãã¡ã€ã«ãå ±æããéã«ã䟿å©ã ã
ä»åã¯ãDropboxã«APIçµç±ã§ã¢ã¯ã»ã¹ããŠãä»»æã®ãã¡ã€ã«ãããŠã³ããŒãããããã°ã©ã ãäœãããããããAPI (Application Programming Interface)ããšã¯ãããæ©èœãå€éšã®ããã°ã©ã ããå©çšã§ããããã«ããããã®ãçªå£ãã®ãããªãã®ã ãæšä»ã®WebãµãŒãã¹ãã¢ããªã§ã¯APIãå ¬éãããŠããããšãå€ãããããå©çšããããšã§æ§ã ãªãµãŒãã¹ãšé£æºã§ããã
Dropboxããã®ä»çµã¿ãæäŸããŠãããAPIãå©çšããããšã§Dropboxäžã®ãã¡ã€ã«ãããã°ã©ã ããæäœã§ãããPythonåãã«ã¯ãå ¬åŒã®Dropboxããã±ãŒãžãæäŸãããŠããã
pipã³ãã³ãã䜿ã£ãŠã€ã³ã¹ããŒã«ããããã¿ãŒããã«(WindowsãªãPowerShellãmacOSãLinuxãªãã¿ãŒããã«)ãèµ·åããŠã次ã®ã³ãã³ããå®è¡ãããããã®ã³ãã³ãã¯ãDropboxã®APIãæäœããããã±ãŒãžãã€ã³ã¹ããŒã«ãããã®ã ã
pip install dropbox
Dropboxã®èªèšŒæ å ±ãååŸããã
ãã ããAPIãå©çšããã«ã¯Dropboxã®èªèšŒæ å ±ãå¿ èŠã ããŸãã¯ãã©ãŠã¶ã§ãã¡ãã«ããDropboxã®éçºè åããµã€ãã«ã¢ã¯ã»ã¹ãããã°ã€ã³ãããããããŠããã¢ããªãäœæããã¿ã³ãã¯ãªãã¯ããããç»é¢ã¯è±èªã ããåºæ¬çã«ã¯éžæããŠããã ãã§å€§äžå€«ã ã
æåã®ç»é¢ã§ã¯ãã¢ããªã®ååãæå®ããå¿ èŠãããããã®ååã¯äžçäžã§äžæã§ããå¿ èŠãããããã®ããããFileReader20260406-1613ãã®ããã«æ¥æãã©ã³ãã ãªæ°åãä»ããããèªåã®ååããã¡ã€ã³åãªã©ãšçµã¿åãããŠæå®ãããããããŠãCreate App(ã¢ããªäœæ)ããã¿ã³ãã¯ãªãã¯ãããã
次ã«ãã¢ããªã®èšå®ãããç»é¢ã衚瀺ãããããŸãã¯ãã¢ããªã«ãã¡ã€ã«ã®èªã¿èŸŒã¿æš©éãäžãããããPermissions(æš©é)ããã¯ãªãã¯ããŠãæš©éäžèЧã®äžãããfiles.content.read(ãã¡ã€ã«ã³ã³ãã³ãèªã¿èŸŒã¿)ãã«ãã§ãã¯ãå ¥ããŠãSubmitããã¿ã³ãã¯ãªãã¯ãããã
ä»åã¯èªåã®Dropboxã«ã¢ã¯ã»ã¹ã§ããã¢ããªãäœãã ããªã®ã§ãç¹ã«èšå®ã¯å€æŽããããã®ãŸãŸäžã«ã¹ã¯ããŒã«ããŠããOAuth 2ãã®ãšããã«ãããGenerate access token(ã¢ã¯ã»ã¹ããŒã¯ã³ã®äœæ)ããã¿ã³ãã¯ãªãã¯ãããããããšãAPIã¢ã¯ã»ã¹ã«å¿ èŠãªããŒã¯ã³ãçæãããããã®ã¢ã¯ã»ã¹ããŒã¯ã³ãã³ããŒãããã
ãªããçè ãããã£ãã®ã¯ãå ã«æš©éã倿ŽããŠããã¢ã¯ã»ã¹ããŒã¯ã³ãäœæããªããã°ãªããªãç¹ã ãããå ã«ã¢ã¯ã»ã¹ããŒã¯ã³ãäœæããŠããŸã£ãå Žåã¯ãæš©éã倿ŽããåŸã§ãã©ãŠã¶ç»é¢ããªããŒãããã¢ã¯ã»ã¹ããŒã¯ã³ãååŸãçŽããã
ã¢ã¯ã»ã¹ããŒã¯ã³ãç°å¢å€æ°ã«ç»é²ããã
ã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããããAPIããæè»œã«äœ¿ããããã«ç°å¢å€æ°ãžç»é²ããããWindowsã§ããã°ãã³ã³ãããŒã«ããã«ãéããŠããã·ã¹ãã ãâã詳现ã·ã¹ãã èšå®ãâãç°å¢å€æ°ããšé²ã¿ããã·ã¹ãã ç°å¢å€æ°ãã®ãæ°èŠããã¯ãªãã¯ããŠã倿°åã«ãDROPBOX_ACCESS_TOKENããå€ã«ã³ããŒããããŒã¯ã³ã貌ãä»ãããã
macOSã§ããã°ãZSHã®èšå®ãã¡ã€ã«ã~/.zshrcãã«äžèšã远èšããŠãã¿ãŒããã«ã§ãsource ~/.zshrcããå®è¡ããŠåæ ããããã
export DROPBOX_ACCESS_TOKEN="ããã«ã³ããŒããããŒã¯ã³ã貌ãä»ãã"
ç°¡åãªããã°ã©ã ãäœæããã
以äžã§æºåå®äºã ãæ¬¡ã®ããã°ã©ã ãå®è¡ããŠãã¹ãããŠã¿ãããããã¯ãDropboxã®ã«ãŒããã£ã¬ã¯ããªã«ãããã¡ã€ã«ã®äžèЧã衚瀺ãããã®ã ããfiles.pyããšããååã§ä¿åãããã
import os
import sys
import dropbox
# ããŒã¯ã³ãç°å¢å€æ°ããååŸ --- (â»1)
TOKEN = os.environ.get("DROPBOX_ACCESS_TOKEN")
if not TOKEN:
print("ç°å¢å€æ° DROPBOX_ACCESS_TOKEN ãèšå®ãããŠããŸããã")
sys.exit(1)
# Dropboxã«æ¥ç¶ --- (â»2)
dbx = dropbox.Dropbox(TOKEN)
# ã«ãŒããã£ã¬ã¯ããªã®ãã¡ã€ã«äžèЧãååŸããŠè¡šç€º
print("--- Dropbox ã«ãŒãã®ãã¡ã€ã«äžèЧ ---")
try:
# ãã¡ã€ã«äžèЧãååŸ --- (â»3)
res = dbx.files_list_folder('') # ã«ãŒã('')ãæå®
for entry in res.entries:
# ãã©ã«ããã©ããå€å® --- (â»4)
if isinstance(entry, dropbox.files.FolderMetadata):
print(f"ãã©ã«ã: {entry.name}")
elif isinstance(entry, dropbox.files.FileMetadata):
print(f"ãã¡ã€ã«: {entry.name}")
except dropbox.exceptions.ApiError as err:
print(f"APIãšã©ãŒãçºçããŸãã: {err}")
ã¿ãŒããã«ã§æ¬¡ã®ã³ãã³ããå®è¡ããŠã¿ããã
python files.py
ãããšã次ã®ç»é¢ã®ããã«ãDropboxã®ã«ãŒããã£ã¬ã¯ããªã«ãããã¡ã€ã«äžèЧã衚瀺ãããã¯ãã ã
ããã°ã©ã ãç°¡åã«ç¢ºèªãããã(â»1)ã¯ç°å¢å€æ°ããããŒã¯ã³ãèªã¿èŸŒãã§ãããããŒã¯ã³ã¯ãå ã»ã©ååŸããã¢ã¯ã»ã¹ããŒã¯ã³ã ããããŠã(â»2)ã§Dropboxã«æ¥ç¶ãã(â»3)ã§ãã¡ã€ã«äžèЧãååŸããŠãããæåŸã«(â»4)ã§ãã©ã«ããã©ããå€å®ããŠããã¡ã€ã«åã衚瀺ããŠããã
ãã¡ã€ã«ãååŸããŠã¡ãŒã«éä¿¡ããããŒã«ãäœãã
ããã§ã¯ã次ã«ãå®éã«Dropboxãããã¡ã€ã«ãããŠã³ããŒãããŠãã¡ãŒã«ã§éä¿¡ããããã°ã©ã ãäœã£ãŠã¿ããã
ãªããã¡ãŒã«éä¿¡ã«é¢ããŠã¯ãæ¬é£èŒã®112åç®ãš123åç®ã§æ±ã£ãŠããã®ã§ããã¡ããåç §ããŠã»ããã
æ¹ããŠèšå®æ¹æ³ãæžããšãGoogleã¢ã«ãŠã³ãã®èšå®ã§äºæ®µéèªèšŒãæå¹ã«ããäžã§ãã¢ããªãã¹ã¯ãŒããçºè¡ããã
ãã®åŸãSMTPéä¿¡ã®ããã®ç°å¢å€æ°ãèšå®ããããèšå®ããã®ã¯ä»¥äžã®2ã€ã ã
- GMAIL_ACCOUNT: Gmailã®ã¡ãŒã«ã¢ãã¬ã¹ãæå®
- GMAIL_PASSWORD: Googleã¢ã«ãŠã³ãèšå®ã§çºè¡ããã¢ããªãã¹ã¯ãŒã
ä»åã¯ãDropboxã«ããã売äžããŒã¿.xlsxããšãããã¡ã€ã«ãããŠã³ããŒãããã¡ãŒã«ã§éä¿¡ããããã°ã©ã ãäœã£ãŠã¿ããèªè ã®çšéã«å¿ããŠæžãæããŠäœ¿ã£ãŠã»ããã以äžã®ããã°ã©ã ããsend.pyããšããååã§ä¿åããããããã°ã©ã ã¯ããã¡ãã«ãã¢ããããŒãããŠããã
"""Dropboxãããã¡ã€ã«ãããŠã³ããŒãããŠGmailã§éä¿¡"""
import os
import dropbox
import smtplib
from email.message import EmailMessage
import sys
# 宿°ã®èšå® --- (â»1)
MAIL_TO = "mailto@example.com" # â
èŠå€æŽ - ã¡ãŒã«ãéä¿¡ããå®å
ãæå®
DROPBOX_FILE = "/売äžããŒã¿.xlsx" # â
èŠå€æŽ - éä¿¡ããããã¡ã€ã«
DIR_ROOT = os.path.dirname(os.path.abspath(__file__))
LOCAL_FILE = os.path.join(DIR_ROOT, "売äžããŒã¿.xlsx")
# ç°å¢å€æ°ããããŒã¯ã³ãªã©ãèªã¿åã --- (â»2)
TOKEN = os.environ.get("DROPBOX_ACCESS_TOKEN")
GMAIL_ACCOUNT = os.environ.get("GMAIL_ACCOUNT")
GMAIL_PASSWORD = os.environ.get("GMAIL_PASSWORD")
def download_file(local_path, dropbox_path) -> bool:
"""Dropboxãããã¡ã€ã«ãããŠã³ããŒããã""" # --- (â»3)
dbx = dropbox.Dropbox(TOKEN)
try:
dbx.files_download_to_file(local_path, dropbox_path)
print("ãã¡ã€ã«ãããŠã³ããŒãããŸãã:", dropbox_path)
return True
except dropbox.exceptions.ApiError as err:
print(f"APIãšã©ãŒãçºçããŸãã: {err}")
return False
def send_mail():
"""GMAILã§ã¡ãŒã«éä¿¡""" # --- (â»4)
msg = EmailMessage()
msg["From"] = GMAIL_ACCOUNT # éãäž»
msg["To"] = MAIL_TO # éãå
# ä»¶åã®æå®
msg["Subject"] = "DropboxããããŠã³ããŒããããã¡ã€ã«"
# æ¬æã®æå®
msg.set_content("DropboxããããŠã³ããŒããããã¡ã€ã«ãæ·»ä»ããŸãã")
with open(LOCAL_FILE, "rb") as f:
msg.add_attachment(f.read(),
maintype="application",
subtype="octet-stream",
filename=os.path.basename(LOCAL_FILE))
try:
# ãã°ã€ã³ããŠéä¿¡ --- (â»5)
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp:
smtp.login(GMAIL_ACCOUNT, GMAIL_PASSWORD)
smtp.send_message(msg)
print("ã¡ãŒã«ãéä¿¡ããŸããïŒ")
except Exception as e:
print(f"ã¡ãŒã«éä¿¡äžã«ãšã©ãŒãçºçããŸãã: {e}")
def main():
"""ã¡ã€ã³åŠç""" # --- (â»6)
if download_file(LOCAL_FILE, DROPBOX_FILE):
send_mail()
if __name__ == "__main__":
if not (TOKEN and GMAIL_ACCOUNT and GMAIL_PASSWORD):
print("ç°å¢å€æ°ãèšå®ããŠãã ãã")
sys.exit(1)
main()
ããã°ã©ã ãå®è¡ããã«ã¯ãã¿ãŒããã«ã§æ¬¡ã®ã³ãã³ããå®è¡ãããããã ãã(â»1)ã®ã¡ãŒã«ã®éãå ãDropboxã®ãã¡ã€ã«åã¯å€æŽãããã
python send.py
ãããšãDropboxãããã¡ã€ã«ãããŠã³ããŒããããã¡ãŒã«ãéä¿¡ããããéä¿¡åŸã«Gmailãéããæ£ããéä¿¡ã§ããã確èªããŠã¿ãããæ¬¡ã®ç»é¢ã®ããã«ãã¡ãŒã«ãéä¿¡ãããããšã衚瀺ãããã¯ãã ã
ç°¡åã«ããã°ã©ã ã確èªãããã(â»1)ã§ã¯ã¡ãŒã«ã®éãå ãšDropboxã®ãã¡ã€ã«åãæå®ããŠããããããŠã(â»2)ã§ã¯ç°å¢å€æ°ããããŒã¯ã³ãªã©ãèªã¿èŸŒãã§ããããã®åŸã(â»3)ã§Dropboxãããã¡ã€ã«ãããŠã³ããŒãããŠã(â»4)ã§ã¡ãŒã«ãéä¿¡ãããæåŸã«(â»5)ã§Gmailã«ãã°ã€ã³ããŠã¡ãŒã«ãéä¿¡ããã(â»6)ã¯ã¡ã€ã³åŠçã ã
ãŸãšã
ä»åã¯ãDropboxããããŠã³ããŒããããã¡ã€ã«ãGmailã§éä¿¡ããããã°ã©ã ãäœã£ãŠã¿ããDropboxã®APIã¯å ¬åŒã«æäŸãããŠããããšãŠãæ±ãããããšæãããéçºè ãµã€ãã§ããŒã¯ã³ãçºè¡ããæéã¯ãããã®ã®ãäžåºŠæé ãèŠããŠããŸãã°ã次å以éã¯ã¹ã ãŒãºã«å©çšã§ããã ããã
ãªããä»åäœæããããã°ã©ã ã§ã¯ããã¡ã€ã«ã®ããŠã³ããŒããšã¡ãŒã«éä¿¡ãå¥ã ã®é¢æ°ã«åããŠããããã®ãããè€æ°ãã¡ã€ã«ã®ããŠã³ããŒãã«å¯Ÿå¿ããããªã©ã®æ¹è¯ãé£ãããªããå®éã«ãã®ããã°ã©ã ãæŽ»çšããŠãæ¥ã ã®äœæ¥ã®èªååã«ææŠããŠã¿ããã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿èªå®ã2010幎 OSSè²¢ç®è ç« åè³ããããŸã§50å以äžã®æè¡æžãå·çãããçŽè¿ã§ã¯ããå€§èŠæš¡èšèªã¢ãã«ã䜿ãããªãããã®ããã³ãããšã³ãžãã¢ãªã³ã°ã®æç§æž(ãã€ããåºç)ããPythonã§ã€ãããã¹ã¯ãããã¢ããª(ãœã·ã )ããå®è·µåã身ã«ã€ãã Pythonã®æç§æž 第2çããã·ãŽããã¯ãã©ã PythonèªååŠçã®æç§æž(ãã€ããåºç)ããªã©ã






