このスクリプトを利用することにより、is01, sh-10b, jn-dk01のソースを取得・展開してくれます。
使い方(Ubuntu環境)は以下の通りです。
まず、easy_install等で必要なモジュールをインストールします。
#sudo apt-get install setup_tools ←インストールしていない場合
#sudo easy_install -U MultipartPostHandler
#sudo easy_install -U BeautifulSoup
スクリプトの実行例は以下の通りです。
#python ./sdasg.py is01 ←is01のソースを取得・展開したい場合
#python ./sdasg.py sh-10b ←sh-10bのソースを取得・展開したい場合
#python ./sdasg.py jn-dk01 ←jn-dk01のソースを取得・展開したい場合
以下がスクリプトです。
# -*- coding: utf-8 -*- #------------------------------------------------------------------------------- # Name: SH Dev Android Source Getter(特に名前決めてない) # Purpose: (https://sh-dev.sharp.co.jp/android/modules/oss/)がsvnやgitでの # ソース公開してなかったので自動でダウンロードしてきて展開するスク # リプト作った。 # 使用する際は、GPL(http://www.gnu.org/licenses/)と各々のソフトウェ # ア使用許諾契約書に同意すること。 # # Usage: 引数にis01, sh-10b, jn-dk01のどれかを与えてください。 # スクリプト直下にディレクトリを作られ保存されます。 # 例)is01のソースを取得・展開します。 # #python ./sdasg.py is01 # # Require MultipartPostHandler, BeautifulSoupをeasy_installなどでインストー # ルしてください。 # # Author: renax64.blogspot.com # # Created: 02/12/2010, ver. 0.3 # Copyright: (c) renax64.blogspot.com 2010 #------------------------------------------------------------------------------- #!/usr/bin/env python import os import sys from BeautifulSoup import BeautifulSoup #import datetime import urllib2 import MultipartPostHandler import cookielib import tarfile #初期値: 対策されたときここを書き換える init_vals ={ "main_url":"https://sh-dev.sharp.co.jp/android/modules/oss/index.php?/", "is01":"is01", "sh-10b":"sh10b", "jn-dk01":"jndk01", "dl_form_class":"dl2_center", "dl_tr_class":"dl2_data", "td_date_class":"dl2_center", "td_filename_style":"padding-left:1em", "form_post_class":"dl2_center", "input_name":"ticket", "accept":"同意する ( ダウンロード )", "User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.12 (KHTML, like Gecko) Chrome/9.0.587.0 Safari/534.12", "Content-Type":"multipart/form-data" } #ファイルの取得・展開 def getFile(link, filename, device): try: html = urllib2.urlopen(link) soup = BeautifulSoup(html) form = soup.find("form", {"class":init_vals["form_post_class"]}) ticket = form.find("input", {"name":init_vals["input_name"]}).get("value") params = {"ticket":ticket, "accept":init_vals["accept"]} cookies = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies),MultipartPostHandler.MultipartPostHandler) opener.addheaders = [("User-agent",init_vals["User-Agent"]), ("Content-Type",init_vals["Content-Type"]), ("Referer",link)] f = opener.open(link, params) #device_sourceディレクトリ作成 dir_name = device + "_sources" os.chdir(os.path.dirname(os.path.abspath(__file__))) current_dir = os.getcwd() if os.path.isdir(dir_name) != True: os.mkdir(dir_name) #device_sourceディレクトリへ移動 os.chdir(dir_name) #ファイル書き込み fw = open(filename,'wb') print u"現在 %s をダウンロード中..." % filename fw.write(f.read()) fw.close() #ファイル展開 ft = tarfile.open(filename,"r") print u"現在 %s を展開中..." % filename ft.extractall("./") ft.close() #元のディレクトリへ移動 os.chdir(current_dir) except urllib2.HTTPError, e: e.code, e.msg pass def getInf(device): #オープンソースソフトウェアのファイル一覧ページの解析 curl = init_vals["main_url"] + init_vals[device] try: html = urllib2.urlopen(curl).read() soup = BeautifulSoup(html) tr_data = soup.findAll("tr", {"class":init_vals["dl_tr_class"]}) trs = [] for i in tr_data: link = init_vals["main_url"] + i.a.get("href").replace("./index.php?/", "") #dateは差分処理を実装しようとして取得したが、そこまでする必要もないと思い放置 dates = i.findAll("td", {"class":init_vals["td_date_class"]}) for ix in dates: date = ix.renderContents().split("/") files = i.findAll("td", {"style":init_vals["td_filename_style"]}) for iy in files: filename = iy.a.renderContents() array = dict([["link", link], ["date", date], ["filename", filename]]) trs.append(array) #ファイルの取得 getFile(link, filename, device) return trs except urllib2.HTTPError, e: e.code, e.msg pass def main(): #引数の取得 argvs = sys.argv argc = len(argvs) #実行 #現在のディレクトリパスを取得 c_dir = os.getcwd() if argc == 2: device = argvs[1] if device == "is01": getInf(device) elif device == "sh-10b": getInf(device) elif device == "jn-dk01": getInf(device) else: print "usage: #python ./sdasg.py (is01|sh-10b|jn-dk01)\n" else: print "usage: #python ./sdasg.py (is01|sh-10b|jn-dk01)\n" print u"すべてのファイルの取得・展開が終了しました。" if __name__ == '__main__': main()
こちらからもスクリプトをDLすることができます。
更新履歴:
Ver. 0.3: 気づいた部分のスペルミス修正
Ver. 0.2: UbuntuなどのLinuxで動作しないバグを修正
Ver. 0.1: とりあえずリリース
1 コメント:
Casino king - Casino in Jordan - Airjordan21 Retro
Casino king - Casino in air jordan 18 retro racer blue from us Jordan. air jordan 18 retro racer blue to you Airjordan21 how can i get air jordan 18 retro yellow suede Retro. Find all air jordan 18 retro racer blue to us about the games, equipment, accessories jordan 18 white royal blue online site and gaming experience!
Post a Comment