//D setting ver.1.000 [001]axfc_net [002]axfc.net/uploader/ [004]([^\\/]+)$ [006]true [007]$1 [015]nop [016]auto [019]nop [031]true [032]axfc_net_program2 [033]function axfc_net_program2(){\n\t//=================================================================================\n\t// pass は url の後ろに @ に続けて入れて置いて下さい\n\t// 例 http://www1.axfc.net/uploader/9/so/N9_0000.zip.html@1234567\n\t// pass を省略した場合( @ が無かったら)、\n\t// フォルダ設定のHTTP(1)のPOSTする文字列が参照される\n\t// POSTする文字列には ; で区切って複数のpass を書き込める\n\t// 例 iria;irvine;etc\n\t//DLが中断されていた時、有効期限内なら再開します\n\t//=================================================================================\n\n\tstatic PASS_ERROR = 'キーワードが違います。ご確認のうえアクセスし直して下さい。';\n\tstatic WAITING_AT_TIME = '時間内にダウンロードされた回数が設定された回数を超えています';\n\tstatic COUNT = '\\d+人\\(過去5分間にアクセスした合計人数です。\\)<\\/TD>';\n\tstatic NEXT_TIME = '(\\d+)年(\\d+)月(\\d+)日 (\\d+)時(\\d+)分(\\d+)秒<\\/B>
(この時間に最初にアクセスした方がDLできます。)<\\/TD>';\n\tstatic PRESENT_TIME = '現在の日時<\\/TD>\\s+(\\d+)年(\\d+)月(\\d+)日 (\\d+)時(\\d+)分(\\d+)秒<\\/TD>';\n\tstatic SUCCESS = '<ダウンロ..ドする> 保存する場合は「右クリック→名前をつけて保存」としてください。<\\/a>';\n\tstatic SUCCESS2 = 'ご利用ありがとうございました。ダウンロードできる状態になりました。';\n\tstatic ERROR_302 = '302 Found';\n\tstatic ONCE_AHEAD = '1回前のダウンロ..ド<\\/TD>\\s+(\\d+)年(\\d+)月(\\d+)日 (\\d+)時(\\d+)分(\\d+)秒<\\/TD>';\n\tstatic POSSIBLE = '(\\d+)秒間に(\\d+)回までダウンロ..ドが可..です。';\n\tstatic FILE_LIMIT = '現在の時間帯のファイル毎のダウンロード可能件数を超えているためダウンロードできません。';\n\tstatic FILE_LIMIT2 = '各時間帯ごとのダウンロード可能件数は以下の通りとなっております。(重複の場合は上が優先)';\n\tstatic FILE_LIMIT3 = '

現在の時間帯[^\\n]+\\n';\n\tstatic PLEASE = 'Please visit below URL';\n\tstatic ERROR_FNF = 'そのようなファイルはありません。';\n\tstatic LINE = '==========================================================================================';\n\tstatic LINE2 = '=========================================================================================';\n\t//====================================================================================\n\tvar post_url = '';\n\tvar post_input = new Object;\n\tvar post_inputs;\n\tvar post_data = '';\n\tvar data = '';\n\tvar next;\n\tvar present;\n\tvar once_ahead;\n\tvar possible_time;\n\tvar wait = new Number;\n\tvar auto_adjust = new Number(-1000);\n\tvar cancel;\n\tvar post_http;\n\tvar new_url;\n\tvar temp;\n\tvar temp2;\n\tvar pass_word;\n\tvar count = 0;\n\tvar links;\n\tvar link;\n\tvar pass_index = 0;\n\tvar pass_list;\n\tvar retry_url;\n\t//=================================================\n\t//DLが中断されていた時、再開する\n\t//=================================================\n\tretry_url = axfc_net_get();\n\tif(retry_url != ''){\n\t\tu = new URL(retry_url);\n\t\tu2 = new URL(retry_url);\n\t\tprintln('DLを再開します');\n\t\treturn true;\n\t}\n\t//===================================================\n\t//pass 取得\n\t//===================================================\n\tpass_word = u.url.slice(u.url.lastIndexOf('@') + 1 , u.url.length);\n\tpass_list = theFolderdata.Post.split(';');\n\tif(pass_word == u.url){\n\t\tpass_word = pass_list[0];\n\t\tif(pass_word == ''){\n\t\t\tprintln('パスワードがありません。');\n\t\t\texit();\n\t\t}\n\t}\n\telse{\n\t\tpass_list = ''.split(';');\n\t\tu.url = u.url.slice( 0 , u.url.lastIndexOf('@'));\n\t}\n\t//throw 555;\n\t//====================================================\n\t//サイトに接続 1回目 (パスの入力画面)\n\t//====================================================\n\tvar http = axfc_net_pass(u.url , pass_word);\n\tif(http == false){\n\t\treturn;\n\t}\n\tpost_data = http.post_data;\n\tpost_url = http.post_url;\n\tcancel = 1;\n\t//=====================================================\n\t//バナーを踏む\n\t//=====================================================\n\tlinks = http.data.match(/src=\"([^\"]+)\"/gi);\n\tfor(var i in links){\n\t\tlinks[i].match(/src=\"([^\"]+)\"/i);\n\t\tvar link = RegExp.$1;\n\t\tprintln('link= ' + link);\n\t\tdownload(link);\n\t}\n\t\n\t//======================================================\n\t//空き待ちのループ\n\t//======================================================\n\tdo{\n\t\tprintln('post--->' + post_url);\n\t\tpost_http = post(post_url , post_data.fromSJIStoEUC());\n\t\t//println(post_http.data.fromEUCtoSJIS());\n\t\tif(post_http.responseHeader.code != 200){\n\t\t\taxfc_net_false('POST 失敗');\n\t\t\treturn;\n\t\t}\n\t\tprintln('POST 成功');\n\t\tdata = post_http.data.fromEUCtoSJIS();\n\t\t//==============================================\n\t\t//時間の計算\n\t\t//==============================================\n\t\tif(data.indexOf(WAITING_AT_TIME) != -1){\n\t\t\tprintln(WAITING_AT_TIME);\n\t\t\tprintln(data.match(COUNT));\n\t\t\tprintln(data.match(POSSIBLE));\n\t\t\tpossible_time = RegExp.$1;\n\t\t\tnext = axfc_net_time(data , NEXT_TIME);\n\t\t\tpresent = axfc_net_time(data , PRESENT_TIME);\n\t\t\tonce_ahead = axfc_net_time(data , ONCE_AHEAD);\n\t\t\tprintln(++count + '回目');\n\t\t\tprintln('前回 ' + once_ahead.toUTCString());\n\t\t\tprintln('現在 ' + present.toUTCString());\n\t\t\tprintln('次回 ' + next.toUTCString());\n\t\t\tif(cancel == 0){\n\t\t\t\tauto_adjust = axfc_net_auto_adjust(once_ahead.getTime() , present.getTime() , next.getTime() , auto_adjust);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tcancel = 0;\n\t\t\t}\n\t\t\twait = next.getTime() - present.getTime() + auto_adjust;\n\t\t\tprintln('調整 ' + auto_adjust + ' ms');\n\t\t\twhile(wait < 1000){\n\t\t\t\twait = possible_time * 1000 + wait;\n\t\t\t}\n\t\t\tif(wait > 200000){\n\t\t\t\twait = 200000;\n\t\t\t\tcancel = 1;\n\t\t\t}\n\t\t\tprintln(wait + 'ミリ秒 待ちます。');\n\t\t\tsleep(wait);\n\t\t\tprintln('時間です。');\n\t\t\tpost_data = axfc_net_post_data(data);\n\t\t\tif(data.match(/
/)){\n\t\t\t\tpost_url = new URL(post_url).expand(RegExp.$1);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\t//========================================\n\t\t//読み込みエラー\n\t\t//========================================\n\t\tif(data.indexOf(ERROR_302)!= -1){\n\t\t\taxfc_net_false('302に飛ばされました。');\n\t\t\treturn;\n\t\t}\n\t\t//=========================================\n\t\t//パスワードエラー\n\t\t//=========================================\n\t\tif(data.indexOf(PASS_ERROR) != -1){\n\t\t\tprintln(PASS_ERROR);\n\t\t\tif(pass_list.length > ++pass_index){\n\t\t\t\tpass_word = pass_list[pass_index];\n\t\t\t\thttp = axfc_net_pass(u.url , pass_word);\n\t\t\t\tif(http == false){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tpost_data = http.post_data;\n\t\t\t\tpost_url = http.post_url;\n\t\t\t\tcancel = 1;\n\t\t\t\tsleep(3000);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\telse{\n\t\t\t\texit();\n\t\t\t}\n\t\t}\n\t\t//=========================================\n\t\t//ファイル毎のリミット\n\t\t//=========================================\n\t\tif(data.indexOf(FILE_LIMIT) != -1){\n\t\t\t//println(data);\n\t\t\tprintln(LINE);\n\t\t\ttemp = data.match(FILE_LIMIT3);\n\t\t\ttemp = temp[0];\n\t\t\ttemp2 = temp.match(/>[^<]+([^<]+) ' + u.url);\n\tu2.url = u.url;\n\taxfc_net_keep(u.url);\n\treturn true;\n}\n//============================================\n//POSTデータの収集\n//============================================\nfunction axfc_net_post_data(data){\n\tvar post_inputs;\n\tvar post_input = new Object;\n\tvar post_data = '';\n\tpost_inputs = data.match(//ig);\n\tfor(var i in post_inputs){\n\t\tvar s = post_inputs[i];\n\t\ts.match(//i);\n\t\tpost_input[RegExp.$1] = RegExp.$2;\n\t}\n\tfor(var i in post_input){\n\t\tprintln('post data> ' + i + ' = ' + post_input[i]);\n\t\tpost_data += i + '=' + post_input[i] + '&';\n\t}\n\tpost_data = post_data.slice( 0 , post_data.length - 1);\n\treturn post_data;\n}\n//=============================================\n//時間処理\n//=============================================\nfunction axfc_net_time(data , pattern){\n\tvar day = new Object;\n\tdata.match(pattern);\n\t\tday.yyyy = RegExp.$1;\n\t\tday.mm = parseInt(RegExp.$2) + 1;\n\t\tday.dd = RegExp.$3;\n\t\tday.hh = RegExp.$4;\n\t\tday.nn = RegExp.$5;\n\t\tday.ss = RegExp.$6;\n\tvar day2 = new Date(day.yyyy , day.mm , day.dd , day.hh , day.nn , day.ss , 00);\n\treturn day2;\n}\n//==============================================\n//時間調整\n//==============================================\nfunction axfc_net_auto_adjust(once_ahead , present , next, auto_adjust){\n\tvar work = present - once_ahead;\n\tvar work2 = next - present;\n\tif(work2 > work){\n\t\tif(work == 0){\n\t\t\treturn auto_adjust - 100;\n\t\t}\n\t\tif(work == 1000){\n\t\t\treturn auto_adjust - 300;\n\t\t}\n\t\tif(work == 2000){\n\t\t\treturn auto_adjust - 500;\n\t\t}\n\t\tif(work >= 3000){\n\t\t\treturn auto_adjust - 1000;\n\t\t}\n\t}\n\telse{\n\t\tif(work2 == 1000){\n\t\t\treturn auto_adjust + 100;\n\t\t}\n\t\tif(work2 == 2000){\n\t\t\treturn auto_adjust + 300;\n\t\t}\n\t\tif(work2 == 3000){\n\t\t\treturn auto_adjust + 500;\n\t\t}\n\t\tif(work2 >= 4000){\n\t\t\treturn auto_adjust + 1000;\n\t\t}\n\t}\n\treturn auto_adjust;\n}\n//==============================================\n//失敗\n//==============================================\nfunction axfc_net_false(str){\n\tprintln(str);\n\tu.url = '';\n\tu2.url = '';\n\tprintln('3秒待機します。');\n\tsleep(3000);\n}\n\n//====================================================\n//サイトに接続 1回目 (パスの入力画面)\n//====================================================\nfunction axfc_net_pass(url , pass_word){\n\tvar http = download(url);\n\tif(http.responseHeader.code == 302){\n\t\tprintln('location>' + http.responseHeader.location);\n\t\turl = http.responseHeader.location;\n\t\thttp = download(url);\n\t}\n\tif(http.responseHeader.code != 200){\n\t\taxfc_net_false('パスの入力画面に接続出来ません、URLを確認して下さい');\n\t\treturn false;\n\t}\n\thttp.data.match(//);\n\tvar post_url = new URL(url).expand(RegExp.$1);\n\tprintln('url> ' + post_url);\n\tvar post_data = axfc_net_post_data(http.data);\n\thttp.data.match(//);\n\tpost_data += '&' + RegExp.$1 + '=' + pass_word;\n\tprintln('post> 入力= ' + pass_word);\n\thttp.post_data = post_data;\n\thttp.post_url = post_url;\n\treturn http;\n}\n//=========================================================\n//新しいURLを保存\n//=========================================================\nfunction axfc_net_keep(url){\n\tvar fkey = filenameKey.replace(/=/g,'_');\n\n\tvar limit = new Array( 0 , 48 * 60 , 36 * 60 , 24 * 60 , 12 * 60 , 6 * 60 , 4.5 * 60 , 3 * 60 , 2.5 * 60 , 2 * 60 , 90 , 60 , 45 , 30 , 15 , 10 , 0 , 0 , 5 , 0 , 5);\n\tfilenameKey.match(/uploader\\/(\\d+)\\//);\n\tvar n = RegExp.$1;\n\n\tvar c_time = new Date();\n\tvar limit_time = c_time.getTime() + limit(n) * 60 * 1000;\n\n\tvar ivp = new irvinePath;\n\tvar path = extractFilePath(ivp.application) + '\\Dorothy\\';\n\tvar d = new Directory(path);\n\tif(! d.exists()){\n\t\td.make();\n\t}\n\n\tvar ini = new Ini(path + 'axfc.ini');\n\tini.write('user' , fkey , url);\n\tini.write('time' , fkey , limit_time);\n\tini.update();\n\taxfc_net_clear();\n}\n\n//=========================================================\n//保存されているURLを読み込む\n//=========================================================\nfunction axfc_net_get(){\n\tvar fkey = filenameKey.replace(/=/g,'_');\n\n\tvar ivp = new irvinePath;\n\tvar path = extractFilePath(ivp.application) + '\\Dorothy\\';\n\tvar d = new Directory(path);\n\tif(! d.exists()){\n\t\td.make();\n\t}\n\tvar ini = new Ini(path + 'axfc.ini');\n\tvar keep_url = ini.read('user' , fkey , '');\n\tvar limit_time = ini.read('time' , fkey , '');\n\tif(keep_url == ''){\n\t\treturn '';\n\t}\n\tvar c_time = new Date();\n\tif(c_time.getTime() > limit_time){\n\t\treturn '';\n\t}\n\tprintln('有効期限 ' + new Date(limit_time));\n\treturn keep_url;\n}\t\n//=========================================================\n//古くなったデータを削除\n//=========================================================\nfunction axfc_net_clear(){\n\n\tvar ivp = new irvinePath;\n\tvar path = extractFilePath(ivp.application) + '\\Dorothy\\';\n\tvar d = new Directory(path);\n\tif(! d.exists()){\n\t\td.make();\n\t}\n\tvar ini = new Ini(path + 'axfc.ini');\n\n\tvar c_time = new Date();\n\tvar user = ini.readSection('user');\n\tvar times = ini.readSection('time');\n\tvar time;\n\tvar i;\n\tfor(i in times){\n\t\ttime = ini.read('time' , times[i] , 0);\n\t\tif(c_time.getTime() > time){\n\t\t\tini.deleteKey('user' , times[i]);\n\t\t\tini.deleteKey('time' , times[i]);\n\t\t}\n\t}\n\tini.update();\n}\n [036]true //end 使い方は readme.txt の設定データの更新を読んで下さい。