ErrorLevel("syntax") # 2010/05/17 (Mon) ネット接続部分修正 selindex[1] = "しない" selindex[2] = "する" Mortexe = systempath("ScriptExe") \ "MortScript.exe" Newsmscr = systempath("ScriptPath") \ systempath( "ScriptName" ) & systempath( "ScriptExt" ) NotifyApp = "\Program Files\cmdRegistryNotifyApp\cmdRegistryNotifyApp.exe" NotifyAppStop = "\Program Files\cmdRegistryNotifyApp\cmdRegistryStopNotification.exe" NewsRunAtT = """" & Newsmscr & """ RunAtTimer=ON" NewsRunAtA = """" & Newsmscr & """ RunAtAutoexec=ON" ConnectName = split("接続しない,その他,インターネット設定",",") gozen = "Software\5zen\News" # 記事を表示するブラウザー Browser = "\Windows\iexplore.exe" #Browser = "\Program Files\Opera Mobile 10\Opera10-armv4i.exe" # 記事のページ数 MaxPage = 12 # 記事の数 MaxKiji = 7 ConnectName = split("接続しない,その他,インターネット設定",",") ### URL設定 NewsTitleArray = Array("注目","事件","政治","経済・IT","国際","スポーツ","エンタメ","生活","文化","科学","新商品","地方") NewsUrlArray = Array("http://sankei.jp.msn.com/rss/news/points.xml", \ "http://sankei.jp.msn.com/rss/news/affairs.xml", \ "http://sankei.jp.msn.com/rss/news/politics.xml", \ "http://sankei.jp.msn.com/rss/news/economy.xml", \ "http://sankei.jp.msn.com/rss/news/world.xml", \ "http://sankei.jp.msn.com/rss/news/sports.xml", \ "http://sankei.jp.msn.com/rss/news/entertainments.xml", \ "http://sankei.jp.msn.com/rss/news/life.xml", \ "http://sankei.jp.msn.com/rss/news/culture.xml", \ "http://sankei.jp.msn.com/rss/news/science.xml", \ "http://sankei.jp.msn.com/rss/news/release.xml", \ "http://sankei.jp.msn.com/rss/news/region.xml" ) MonthArray = Map("Jan",1,"Feb",2,"Mar",3,"Apr",4,"May",5,"Jun",6,"Jul",7,"Aug",8,"Sep",9,"Oct",10,"Nov",11,"Dec",12,"","") ### データフォルダのパス DATA_path = systempath("ScriptPath") ### テンポラリファイル名 DL_temp = DATA_path \ "News_temp.txt" ### テキスト出力名 Newsout = DATA_path \ "News_Text.txt" ### レジストリ読み込み # 終了時にToday画面を再描画させるか call("RegstorySet","RDToday",1) # 接続方法 call("RegstorySet","InternetConnect",3) # タイマー call("RegstorySet","Timelag", 10) call("RegstorySet","Interval",5) # 現在の表示ページ call("RegstorySet","NowPage", 1) ### 表示する記事を切り替える ### if (Move ne "") Switch ( 1 ) case (ToUpper(Move) eq "NEXT") NowPage = NowPage + 1 if ( NowPage > MaxPage) NowPage = 1 endif case (ToUpper(Move) eq "BACK") NowPage = NowPage - 1 if ( NowPage < 1 ) NowPage = MaxPage endif endswitch # 指定のページの記事を0番(表示用)に移行 for i = 1 to MaxKiji regwritestring("HKCU",gozen \ 0 \ i,"Title" , regread("HKCU",gozen \ NowPage \ i, "Title")) regwritestring("HKCU",gozen \ 0 \ i,"URL" , regread("HKCU",gozen \ NowPage \ i, "URL")) regwritestring("HKCU",gozen \ 0 \ i,"Date" , regread("HKCU",gozen \ NowPage \ i, "Date")) next # ジャンル名・表示ページを設定 regwritestring("HKCU",gozen ,"Category" , NewsTitleArray[NowPage] ) regwritestring("HKCU",gozen ,"NowPage" , NowPage ) exit endif ### 記事をブラウザで表示 ### if (Num ne "") Url = regread("HKCU",gozen \ 0 \ Num ,"URL") Title = regread("HKCU",gozen \ 0 \ Num ,"Title") if (title ne "") if (Question("「" & Title & "」^NL^^NL^をブラウザで表示します。","確認","YesNo")) Run( Browser, Url) endif endif exit endif ### タイマー起動 ### if(RunAtTimer eq "ON") # Desktopが表示されてていない場合、五分後に再実行 if (ActiveWindow() ne "Desktop") t = timestamp() call("TimerSet",t + 5 * 60 - (t MOD 1800)) exit endif # ネット接続 i = 0 callfunction("NetConnect",i) if(i) # 回線接続できなかった call("TimerSet",timestamp() + Interval * 60) exit else # お天気データダウンロード callfunction("NewsDownload",i) if(i) call("TimerSet",timestamp() + Interval * 60) else call("TimerRoundSet") endif endif # ネット切断 call("NetDisconnect") exit endif ### マニュアル起動 ### if(RunAtManual eq "ON") # 実行問い合わせ if (Question("記事データを取得します。",""."YesNo")) # ネット接続 i = 0 showwaitcursor callfunction("NetConnect",i) if(i) hidewaitcursor message("ネット接続できませんでした") else call("NewsDownload") call("NetDisconnect") hidewaitcursor message("ニュースの取得を完了しました。") endif endif exit endif ### 回線接続時の自動起動によるダウンロード ### if(RunAtAutoexec eq "ON") NowTime = timestamp() + 60 while((regread("HKLM","System\State\Connections","Count") = 0) and (NowTime > timestamp())) sleep(1000) endwhile if(regread("HKLM","System\State\Connections","Count") = 0) exit endif for i = 1 to 3 callfunction("NewsDownload",j) if(j) sleep(10000) else i = 3 endif next exit endif while(1) ### メニュー選択 ### callfunction("TimerStr",buff) choice("MSN産経ニュース","現在のニュースは^NL^" & regread("HKCU",gozen,"ReleaseYMDT") & "^NL^のものです", \ "タイマーセット(" & buff & ")" , \ "", \ "タイマーキャンセル" , \ "", \ "取得時タイムラグ(" & Timelag & "分)" , \ "再取得インターバル(" & Interval & "分)", \ "", \ "その他の設定" , \ "", \ "ニュースダウンロード") ## 終了 case(0) exit ## タイマーセット case(1) if(question("タイマーをセットしますか?")) call("TimerDelete") callfunction("TimerRoundSet",j) message("初回 " & formattime("y/m/d H:i:s",j) & " にセットしました") endif ## タイマーキャンセル case(3) if(question("タイマーをキャンセルしますか?^NL^現在 " & buff)) call("TimerDelete") message("タイマーを削除しました") endif ## 取得時タイムラグ case(5) j = input("更新時間の何分後にチェックしますか?","タイムラグ",0,0,Timelag) * 1 if(j<0) j = 0 endif if(question(j & "分後でよろしいですか?")) Timelag = j endif ## 再取得インターバル case(6) j = input("更新失敗時何分間隔に再度チェックしますか?","インターバル",0,0,Interval) * 1 if(j<1) j = 1 endif if(question(j & "分間隔でよろしいですか?")) Interval = j endif ## その他の設定 case(8) i = 1 while(i) LANautoexec = regkeyexists("HKLM","System\Notifications\News.LANautoexec") ASautoexec = regkeyexists("HKLM","System\Notifications\News.ASautoexec") choice("お天気情報","各種設定", \ "ネット接続設定(" & ConnectName[InternetConnect] & ")" , \ "LAN接続時に自動更新" & selindex[LANautoexec + 1] , \ "AS開始時に自動更新" & selindex[ASautoexec + 1] ) # キャンセル case(0) i = 0 # 接続設定 case(1) j = choice("お天気情報","インターネット接続名の選択",InternetConnect,0,ConnectName) if(j) InternetConnect = j regwritedword("HKCU",gozen,"InternetConnect",InternetConnect) endif #LAN接続時の自動更新 case(2) if(LANautoexec) runwait(NotifyAppStop,"3;News.LANautoexec") else runwait(NotifyApp,"3;News.LANautoexec;HKLM;System\State\Hardware;WiFi;" & Mortexe & ";'" & NewsRunAtA & "';-;-;-1;1;2;16;16;-") endif # AS開始時の自動更新 case(3) if(ASautoexec) runwait(NotifyAppStop,"3;News.ASautoexec") else runwait(NotifyApp,"3;News.ASautoexec;HKLM;System\State\Hardware;Cradled;" & Mortexe & ";'" & NewsRunAtA & "';-;-;-1;1;2;-;1;-") endif endchoice endwhile ## ニュースダウンロード case(10) i = 0 showwaitcursor call("NetConnect", i) if(i) hidewaitcursor message("ネット接続できませんでした") else call("NewsDownload") call("NetDisconnect") hidewaitcursor endif endchoice endwhile exit ############################################################################################################################################ ### 巡回タイマーセット ### sub TimerRoundSet now = timestamp() # now = MakeTimeStamp(2010,4,8,3,0,0) i = ((now mod 86400) / 3600) Switch ( i ) case ( 0, 1, 2, 3 ) # 当日の4時に取得予定 i = now - (now mod 86400) + 4 * 3600 + Timelag * 60 case ( 4, 5, 6, 7 ) # 当日の8時に取得予定 i = now - (now mod 86400) + 8 * 3600 + Timelag * 60 case ( 8, 9, 10, 11 ) # 当日の12時に取得予定 i = now - (now mod 86400) + 12 * 3600 + Timelag * 60 case ( 12, 13, 14, 15 ) # 当日の16時に取得予定 i = now - (now mod 86400) + 16 * 3600 + Timelag * 60 case ( 16, 17, 18, 19 ) # 当日の20時に取得予定 i = now - (now mod 86400) + 20 * 3600 + Timelag * 60 case ( 20, 21, 22 ,23 ) # 翌日の0時に設定 i = now - (now mod 86400) + 86400 + Timelag * 60 EndSwitch call("TimerSet",i) return(i) # message("現在時刻:" & formattime("Y/m/d({W}) H:i:s",now) & "^NL^設定時刻:" & formattime("Y/m/d({W}) H:i:s",i)) endsub ### タイマーセット ### sub TimerSet runat(argv[1],Mortexe,NewsRunAtT) regwritedword("HKCU",gozen,"DownloadTime",argv[1]) endsub ### タイマー削除 ### sub TimerDelete removenotifications(Mortexe,NewsRunAtT) regwritedword("HKCU",gozen,"DownloadTime",0) endsub ### ネット接続 ### # out...(ret.) 0...接続している/接続した 1...接続失敗 sub NetConnect WifiNow = regread( "HKLM" , "System\State\Hardware" , "Wifi" ) CellularNow = regread( "HKLM" , "System\State\Connections\Cellular", "Count") AsNow = regread( "HKLM" , "Drivers\USB\FunctionDrivers", "ActiveSyncConnected") ipAddr = regread( "HKLM" , "Comm\Tcpip\Hosts\dtpt_peer" , "ipaddr" ) ipAddrFlg = RegValueExists( "HKLM" , "Comm\Tcpip\Hosts\dtpt_peer", "ipaddr" ) if (CellularNow > 0) return(0) else if((WifiNow = 19) or (WifiNow = 23) or (WifiNow = 27)) return(0) else if (AsNow = 1 && ipAddrFlg = TRUE) #ActiveSync接続済みでIPアドレス割り当て済み return(0) else if (AsNow = 1 && ipAddrFlg = FALSE) #ActiveSync接続済みでIPアドレス割り当てなし return (1) else if ((CellularNow = 0) and (InternetConnect <> 1)) # 回線接続する Connect(ConnectName[InternetConnect]) Sleep( 8000 ) NetConnect = regread("HKLM","System\State\Connections","Count") endif return( NetConnect = 0 ) endif endif endif endif endsub ### ニュースデータダウンロード ### sub NewsDownload textout = "" ErrorFlg = 0 for j = 1 to MaxIndex(NewsURLArray) # データダウンロード # text = readfile(NewsUrlArray[j]) download(NewsUrlArray[j],DL_temp) # 読み込みに成功しているか # if (length(text) = 0) if (not fileexists(DL_temp)) ErrorFlg = 1 message(NewsUrlArray[j]) else text = readfile(DL_temp,0,"utf8-prefix") callfunction("BetweenStrings",text , text,1 , "" , "") x = 1 textout = textout & NewsTitleArray[j] & "^NL^^NL^" for i = 1 to 7 if (find(text,"",x) > 0) callfunction("BetweenStrings",News_Title , text , x, "<title>" , "") callfunction("BetweenStrings",News_URL , text , x, "" , "") callfunction("BetweenStrings",tempDate , text , x, "" , "") callfunction("RepString",News_Title,News_Title) Year = substr(tempDate,13,4) Month = MonthArray[substr(tempDate,9,3)] Day = substr(tempDate,6,2) if (substr(Day,1,1) eq "0") Day = " " & substr(Day,2,1) endif Hour = substr(tempDate,18,2) Min = substr(tempDate,21,2) Sec = substr(tempDate,24,2) regwritestring("HKCU",gozen \ j \ i,"Title" , News_Title) regwritestring("HKCU",gozen \ j \ i,"URL" , News_URL) regwritestring("HKCU",gozen \ j \ i,"Date" , Month & "/" & Day & " " & Hour & ":" & Min) textout = textout & News_Title & "," & News_URL & "," & Month & "/" & Day & " " & Hour & ":" & Min & "^NL^" else regwritestring("HKCU",gozen \ j \ i,"Title" , "") regwritestring("HKCU",gozen \ j \ i,"URL" , "") regwritestring("HKCU",gozen \ j \ i,"Date" , "") endif next endif textout = textout & "^NL^" next writefile(Newsout,textout) regwritestring("HKCU",gozen,"ReleaseYMDT", formattime("Y年m月d日 H時i分 取得", TimeStamp())) if (ErrorFlg = 1) ### ダウンロードに失敗した call("PrintMessage","記事データがダウンロードできませんでした") return(1) else # 指定のページの記事を0番(表示用)に移行 for i = 1 to MaxKiji regwritestring("HKCU",gozen \ 0 \ i,"Title" , regread("HKCU",gozen \ NowPage \ i, "Title")) regwritestring("HKCU",gozen \ 0 \ i,"URL" , regread("HKCU",gozen \ NowPage \ i, "URL")) regwritestring("HKCU",gozen \ 0 \ i,"Date" , regread("HKCU",gozen \ NowPage \ i, "Date")) next # ジャンル名・表示ページを設定 regwritestring("HKCU",gozen \ 0 \ i,"Category" , NewsTitleArray[NowPage] ) return(0) endif endsub ### ネット切断 ### sub NetDisconnect endsub ### 特殊文字列の置き換え # in....[1] 文字列 sub RepString local(i,text,x) RepArray = Array("&") TxtArray = Array("&") text = argv[1] for i = 1 to MaxIndex(RepArray) text = Replace(text,RepArray[i],TxtArray[i]) next return(text) endsub ### ダウンロード(ファイルキャッシュ付) ### # in....[1] ダウンロードするURL # [2] 書き込むファイル名 sub DL_html local(i) showwaitcursor download(argv[1],argv[2]) hidewaitcursor return(readfile(argv[2],0,"utf8-prefix")) endsub ### 配列に読み込む ### # in....[1] html # [2] html切り出し切欠 # [3] html切り出しここまで # [4] 地域名切り出し切欠 # [5] 地域名切り出しここまで # out...area_dir[] html # area_dir_name[] 地域名 sub GetArea local(i,GetStr) i = 1 x = 1 clear(area_dir) clear(area_dir_name) while(x) callfunction("BetweenStrings",GetStr,argv[1],x,argv[2],argv[3]) if(GetStr ne "") area_dir[i] = GetStr callfunction("BetweenStrings",area_dir_name[i],argv[1],x,argv[4],argv[5]) i = i + 1 else x = 0 endif endwhile return(i - 1) endsub ### レジストリ読み込み ### # in....[1] レジストリ名 # [2] 初期値 sub RegstorySet if(regvalueexists("HKCU",gozen,argv[1])) [argv[1]] = regread("HKCU",gozen,argv[1]) else [argv[1]] = argv[2] endif endsub ### 指定文字列間の文字列を返す ### # in....[1] 対象文字列 # [2] 検索位置 # [3] 最初の文字列 # [4] 最後の文字列 # [5] [返り血の文字数制限] # out...ret() 取得文字列 # x 検索後の位置 sub BetweenStrings local(i,text) i = find(argv[1],argv[3],argv[2]) text = "" if(i) i = i + length(argv[3]) x = find(argv[1],argv[4],i) if(x) text = substr(argv[1],i,x-i) x = x + length(argv[4]) endif else x = argv[2] endif # 返り値の制限の有無 if(argc > 4) return(substr(text,1,argv[5])) else return(text) endif endsub ### メッセージ表示 ### # タイマー起動の場合は表示しない sub PrintMessage if((RunAtTimer ne "ON") and (RunAtAutoexec ne "ON")) sleepmessage(SleepTime,argv[1]) endif endsub ### レジストリトグル ### # in....[1] レジストリ名 sub RegstoryToggle [argv[1]] = 1 - [argv[1]] regwritedword("HKCU",gozen,argv[1],[argv[1]]) endsub ### タイマーをセットした時間を返す ### sub TimerStr call("RegstorySet","DownloadTime",0) if(DownloadTime) return(formattime("Y/m/d({W}) H:i:s",DownloadTime)) else return("----/--/--(---) --:--:--") endif endsub