コマンドラインからSharePoint Online(Office 365)へファイルをアップロード
現時点でMicrosoft Online Services モジュールを使ったSharePoint関連の管理はできなさそうだし、でもMicrosoftのWEBサービスを一からスクレイピングするのは相当骨が折れるし、っていうか絶対無理、クッキーに一個だけBase64エンコードされた値があって、それをデコードしたらアスキー圏外って、、、
なので以下がおそらく現時点でのベスト解。SeleniumのIEドライバ(IEDriverServer.exe)を使えばもっと簡単にPythonで書けたんですが、プラットフォームに縛られたくない諸事情によりJythonとHtmlUnitDriverの組み合わせにしました。
#!/usr/bin/env python # -*- coding: utf-8 -*- # All right reserved Youhei Sakurai(sakurai_youhei). # You can use this script under the MIT license. """ This script runs on Jython(Java) with Selenium which HtmlUnit is replaced to 2.10. Jython: http://www.jython.org/ (PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2) Selenium: http://seleniumhq.org/ (Apache 2.0 License) HtmlUnit: http://htmlunit.sourceforge.net/ (Apache 2.0 License) e.g. C:\>"C:\Program Files\Java\jre7\bin\java.exe" -cp C:\selenium-2.25.0\selenium-ja va-2.25.0.jar;C:\selenium-2.25.0\libs\*;C:\jython.jar org.python.util.jython C:\ upload_to_sharepoint_online.py """ # These should be "username@domain.onmicrosoft.com" domain="yourdomain" username="yourlogin" password="yourpassword" filename=r"C:\test2.txt" # Must be absolute path. try: import java.lang.Thread import org.openqa.selenium.htmlunit.HtmlUnitDriver import com.gargoylesoftware.htmlunit.BrowserVersion driver = org.openqa.selenium.htmlunit.HtmlUnitDriver( com.gargoylesoftware.htmlunit.BrowserVersion.FIREFOX_10 ) driver.setJavascriptEnabled(True) from java.util import logging from org.apache.commons.logging import LogFactory logger = LogFactory.getLog('com.gargoylesoftware.htmlunit') logger.getLogger().setLevel(logging.Level.OFF) print "Accessing to TeamSite...", driver.get("http://%s.sharepoint.com/TeamSite"%domain) java.lang.Thread.sleep(500) print "Done." print "Logging in...", driver.findElementByName("login").sendKeys("%s@%s.onmicrosoft.com"%(username,domain)) driver.findElementByName("passwd").sendKeys(password) driver.findElementByName("SI").click() java.lang.Thread.sleep(500) print "Done." print "Opening new document page...", driver.get(driver.findElementById("idHomePageNewDocument").getAttribute("href")) java.lang.Thread.sleep(500) print "Done." print "Uploading file...", driver.findElementByName("ctl00$PlaceHolderMain$ctl01$ctl05$InputFile").sendKeys(filename) driver.findElementByName("ctl00$PlaceHolderMain$ctl00$RptControls$btnOK").click() java.lang.Thread.sleep(500) print "Done." print "Logging out...", driver.get(driver.findElementById("Shell-Header-SignOut").getAttribute("href")) java.lang.Thread.sleep(500) driver.close() print "Done." except ImportError: print "maybe missing some jar(s) in CLASSPATH" except AttributeError: print "maybe old HtmlUnit, requires 2.10 or above."
アディオス!