2008年11月12日

VBでMT(Movable type)に自動でログイン

MTに自動でログインするためのプログラムです。


MTはクッキーが効くのでその有効範囲内なら、ログインを自動的にしますが
しかし


クッキーが切れていたときは自分でユーザー名とパスワードを入れてログインします

それを自動でしてくれる部分です。


        'IEを開く Internet Explorerを起動します
        Dim objIE as Object
        objIE = CreateObject("InternetExplorer.application")
        objIE.visible = True

        'URLにMTのURLを入れます。
        Dim URL = "http://MyMT.com/mt/mt.cgi"

        '指定したMTのURLにアクセスします
        objIE.Navigate(URL)

        Do While objIE.Busy
            DoEvents()
        Loop

        Do While (objIE.document.readyState <> "complete")
            DoEvents()
        Loop

        Do While objIE.readyState <> "4"
            DoEvents()
        Loop

        Sleep(1000)


        'objDocument にIEの開いたページを指定します
        objDocument = objIE.Document
        HTML = objDocument.documentelement.innertext


        'もし、Movable Typeからログアウトしました という文字があったら、ログインするためにパスワードと、ユーザー名を入力して、チェックボックスも恩にします
        If InStr(HTML, "Movable Typeからログアウトしました") > 0 Or InStr(HTML, "サインイン") Then
            objForm = objDocument.Forms(0)
            objForm.UserName.Value = "MTUserName"
            objForm.Password.Value = "MTPassWord"

            objForm = objDocument.Forms(0).elements("remember")
            objForm.Checked = True

            objForm = objDocument.Forms(0)
            objForm.submit()

            MT.WaitIE(objIE)
        End If

ラベル:Movable Type MT
posted by kiyo at 19:06| Internet Explorer | このブログの読者になる | 更新情報をチェックする

2008年11月11日

URLからページを取得してHTMLタグを解析

前回作った、YahooTitleSearchにキーワードを入れて
そこから

キーワードが入ったタイトルのページは何ページインデックスされているか
返す


関数です

長いですが
できは??


ちゃんと値が取れれば値を返して

うまく取得できなかったら
-1
を返します


Internet Explorerは使ってなかたです
使った例はまた書きますね

Public Function YahooTitleSearch(ByVal Keyword As String) As Long
        'Yahoo Web 検索からキーワードにintitle:で検索 0は正常 -10 はHTML処理かYahooのエラー -1 はhttp取得エラー
        Dim URL As String = YahooAPI.URLTitleSearchURL(Keyword)
        Dim client As New WebClient
        Dim HTML As String
        Dim Count As Long
        Dim Word As String
        Dim HTMLCount As Integer
        Dim AllHTMLCount As Long


        Try
            'HTTP Server からストリームを取得
            URL = YahooAPI.URLTitleSearchURL(Keyword)


            Dim wc As WebClient = New WebClient()

            Dim st As Stream = wc.OpenRead(URL)

            Dim enc As Encoding = Encoding.GetEncoding("EUC-JP")
            Dim sr As StreamReader = New StreamReader(st, enc)
            HTML = sr.ReadToEnd()
            sr.Close()

            st.Close()
            'Return HTML

            Word = "</strong>件目 / 約<strong>"
            HTMLCount = InStr(HTML, Word)
            AllHTMLCount = Len(HTML)

            '取得したHTMLの処理
            If InStr(HTML, "次の条件に一致する情報は見つかりませんでした。") > 0 Then
                Count = 0
            ElseIf HTMLCount > 0 Then

                '検索結果の例
                '</strong>件目 / 約<strong>267,000</strong>件
                '</strong>件目 / 約<strong>の右側の文字をHTMLにセット

                HTML = HTML.Replace(Left(HTML, HTMLCount - 1), "")
                HTML = HTML.Replace("</strong>件目 / 約<strong>", "")

                '</strong>件 の左側の文字を取得
                Word = "</strong>件"
                HTMLCount = InStr(HTML, Word)
                HTML = Left(HTML, HTMLCount - 1)

                '267,000 の,を消す
                HTML.Replace(",", "")
                Count = CLng(HTML)
            Else
                Count = -10
            End If

        Catch ex As Exception
            Count = -1
        End Try

        Return Count
    End Function

ラベル:HTML
posted by kiyo at 18:25| Internet Explorer | このブログの読者になる | 更新情報をチェックする

2008年11月10日

IEでアクセスするURLを作る

Internet Explorer(IE)をVBから動かすために最初にURLを作る必要がある。


ここでは、YahooでKeywordをいれて

そのKeywordがタイトルに含まれているページがどのくらいあるか
測定してみるということをしてみたい。

 
「ほしのあき」で調べたら


「ほしのあきの水着」とか


「大好きほしのあき」


などというページがどのくらいあるか調べるために


YahooのURLを作成しよう


"http://search.yahoo.co.jp/search?p=" & Keyword & "&ei=UTF-8"


とURLEncodeしたKeywordをいれて


あとは


文字コードはFTF-8だよ


といってあげるだけでよい


  Public Function URLTitleSearchURL(ByVal Keyword As String) As String


        'Yahoo web search からintitle: で検索する

        Dim APIID As String = "YahooAPIID"

        Dim YahooWebURL As String
        Keyword = Trim(Keyword)

        'intitle:ほしのあき とすることで、ほしのあきをタイトルに持つページがでてくる
        Keyword = "intitle:" & Keyword
        Keyword = Keyword.Replace(" ", " ") '全角スペースを半角にする
        Keyword = Keyword.Replace(" ", " intitle:")
        Keyword = System.Web.HttpUtility.UrlEncode(Keyword)
        YahooWebURL = "http://search.yahoo.co.jp/search?p=" & Keyword & "&ei=UTF-8"

        Return YahooWebURL
    End Function

ラベル:Internet Explorer IE URL
posted by kiyo at 20:20| Internet Explorer | このブログの読者になる | 更新情報をチェックする

2008年11月09日

VBからIEを立ち上げる

Internet Explorerを立ち上げてYahooのページを出してみる。


VB2008からInternet Explorer(IE)を立ち上げることで、


Internet ExplorerをVBから動かすことができる。


たとえば

IEを立ち上げて、Yahooのトップページ行く
そして
検索窓に、「ほしのあき」と入力する
それから
検索ボタンをおして
ほしのあき の検索結果を見るなどができる。


ここでは


Internet Explorerを立ち上げて
Yahooを呼び出すまでの動作です

 


        '####  IE を作成
        Dim objIE as Object


        objIE = CreateObject("InternetExplorer.application")
        objIE.visible = True


        Dim URL as String = "http://www.yahoo.co.jp"


        objIE.Navigate(URL)


        'ここから下のDoEventsは
        'IEがYahooの画面を読み込み終わったかどうか判断しています
        'でも、正確になかなか取れません


        Do While objIE.Busy
            DoEvents()
        Loop


        Do While (objIE.document.readyState <> "complete")
            DoEvents()
        Loop


        Do While objIE.readyState <> "4"
            DoEvents()
        Loop


        Sleep(1000)

ラベル:VB Internet Explorer IE
posted by kiyo at 19:55| インストール | このブログの読者になる | 更新情報をチェックする

2008年11月06日

コンボボックス(ComboBox)で選択した文字列

コンボボックス(ComboBox)で選択された文字列などは


ComboBox1.Text


で取得することができます。


今回は、コンボボックスで選択された値が変更になったら動作をするようにします。

そのためには、
Handles ComboBox1.SelectedIndexChanged


としておきます

下の例は
コンボボックスの値が変わったら、
その選択したテキストを


メッセージボックスに表示するだけの簡単なものです。

Private Sub Refresh(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        'コンボボックスの選択が変わったらおこなう

        'ComboBoxの選択された値を取得する
        Dim ComboText=ComboBox1.Text

        'メッセージボックスで表示する
        MessageBox.Show(ComboText,"選択したもの",MessageBoxButtons.OK)

End Sub
 
もしメッセージボックスのテキストによって動作を変更するなら
Select Case ComboText


        Case "はい"


        Case "いいえ"


End Select


などとComboBoxの選択されたテキストによって


分岐させればよいでしょう。

posted by kiyo at 15:41| ComboBox(コンボボックス) | このブログの読者になる | 更新情報をチェックする

ComboBox(コンボボックス)の初期設定

ComboBoxは項目をドロップダウンリストで選択させることができる、便利なパーツです。
フォームにComboBox1が貼り付けてあるとして


初期設定をしてみましょう


コンボボックスに


10
20
50
100


という数字を入れて


そのなかかから選択してもらうために


まず


 ComboBox1.Items.Clear()


と一度、ComboBoxのアイテムをクリアしています
初期設定なので、クリアする必要はないのですが。


そして


 ComboBox1.Items.Add("10")


と項目に、文字(この場合は数字ですが)をセットしていきます。

 
最後に
 
 ComboBox1.Text = "100"


として


100を選択した状態にしておきます。


Private Sub Formini(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


 ComboBox1.Items.Clear()
 ComboBox1.Items.Add("10")
 ComboBox1.Items.Add("20")
 ComboBox1.Items.Add("50")
 ComboBox1.Items.Add("100")

 ComboBox1.Text = "100"


End Sub

ラベル:Combobox
posted by kiyo at 14:12| ComboBox(コンボボックス) | このブログの読者になる | 更新情報をチェックする

2008年11月05日

CSV形式のファイルの読み込み

VB2008にはCSV形式のファイルの読み込みをしてくれる関数が用意されています。


"テニス","ラケット","シューズ"


というCSVファイルを


テニス


ラケット


シューズ


と読んでくれます。

 
下記の例は


FilePathでファイルを指定して


そこに書いてある
サイトのリストを読み込んでいます


"ID","Domain","Directory","URL","Title"


という形式のサイトリストを


List形式のDictionaryに読み込みます

 

 Public Function AllSiteListData(ByVal FilePath As String) As List(Of Dictionary(Of String, String))
        Dim FileName As String = gDataPath & "\" & FilePath
        Dim SiteData As New List(Of Dictionary(Of String, String))


        If IO.File.Exists(FileName) = False Then
            MessageBox.Show(FileName & vbCrLf & "がありません", "警告", MessageBoxButtons.OK)


            Return SiteData
            Exit Function
        End If


        Using parser As New TextFieldParser(FileName)
            parser.TextFieldType = FieldType.Delimited
            parser.SetDelimiters(",") ' 区切り文字はコンマ
            parser.HasFieldsEnclosedInQuotes = True '単純に,で区切り


            Do While Not parser.EndOfData
                Dim row As String() = parser.ReadFields()
                Dim Item As New Dictionary(Of String, String)
                Item("ID") = row(0)
                Item("Domain") = row(1)
                Item("Directory") = row(2)
                Item("URL") = row(3)
                Item("Title") = row(7)


                SiteData.Add(Item)
            Loop
        End Using
        Return SiteData


    End Function

posted by kiyo at 15:57| ファイル | このブログの読者になる | 更新情報をチェックする

複数行のテキストファイルの読み込み

複数行のテキストファイルを読み込んで見ましょう


例として


test.txtに


VB2008
初心者


と2行のテキストファイルがあるとします


Function ReadFile() as Dictionary(Of String,String)


        Dim FileName As String = DataPath & "\test.txt"
        Dim Data As New Dictionary(Of String, String)


        If IO.File.Exists(FileName) = False Then
            MessageBox.Show(FileName & vbCrLf & "がありません", "警告", MessageBoxButtons.OK)


            Return Data
            Exit Function
        End If


        Dim TextFile As IO.StreamReader
        Dim Line As String
        Dim i As Integer


        TextFile = New IO.StreamReader(FileName)
        i = 0
        Do While -1
            Line = TextFile.ReadLine


            Select Case i
                Case 0
                    Data("Soft") = Line
                Case 1
                    Data("Class") = Line
            End Select


            i = i + 1


            If Line Is Nothing Then
                Exit Do
            End If
        Loop
        TextFile.Close()
        Return Data
    End Function

 
これまでが関数です


この


FunctionはDictionary を返すわけです


Dim Word as New Dictionary(Of String,String)


Word = ReadFile()


Msgbox( Word("Soft"))

'ここで、ファイルの一行目 VB2008とメッセージボックスがでます


MsgBox (Word("Class"))
'ここでファイルの2行目の 初心者とメッセージが出されます

posted by kiyo at 14:54| ファイル | このブログの読者になる | 更新情報をチェックする

テキストファイルの書き出し

ファイルにデータを書き出してみましょう。

ここでは、

書き出すディレクトリ
テキスト
ファイルの名前


を指定して


指定したディレクトリに指定したファイル名でファイルを書き出します。



  'データの書き出し
    Public Function SaveData(ByVal DirectoryName As String, ByVal SaveText As String, ByVal FileName As String) As Boolean


        'ServerDirectoryがなけばエラーを返す
        If IO.Directory.Exists(DirectoryName) = False Then
            MsgBox(DirectoryPath & "がありません")
            Return False
            Exit Function
        End If


        Dim TextFile As IO.StreamWriter

        TextFile = New IO.StreamWriter(DirectoryName & FileName)
        TextFile.Write(SaveText)
        TextFile.Close()

        Return True

    End Function


使い方としては


Dim DirectoryName as String = "C:\Test"
Dim SaveText as String = "こんにちは、初めてファイルを書き出します。"
Dim FileName as String = "save.txt"

SaveData(DirectoryName,SaveText,FileName)


C:\Test\save.txt

文字コードがutf-8で
こんにちは、初めてファイルを書き出します。

と書き出します

FormにTextBoxを貼り付けて


Dim SaveText as String=TextBox1.Text.Trim

としてテキストボックスの内容を書き出してもいいでしょう


ここのTrimは

最初と最後の改行と空白を取り除いてくれます
posted by kiyo at 13:19| ファイル | このブログの読者になる | 更新情報をチェックする

2008年10月30日

ファイルの更新日時と作成日を求める

PC上にあるファイルの作成日とか
最終更新日(最後に書き込んだ日時)の求め方の例です。



この例は

VBのbin\debug\Keyword.txtの作成日と更新日を求めます



        Dim FileName As String = Application.StartupPath() & "\Keyword.txt
        Dim LastDate as Date


        If IO.File.Exists(FileName) Then
        'ファイルが存在するかどうか確認する


            LastDate = IO.File.GetLastWriteTime(FileName)
            msgbox("最終更新日は" & LastDate)
            'GetLstWriteTimeは最後にファイルが書き込まれた日


            LastDate = IO.File.GetCreationTime(FileName)
            msgbox("作成日は" & LastDate)
            'GetCreationTimeはファイルを作成した日時


        Else

            msgbox(FileName & " がありません")
            'FileNameがなかったらメッセージを出す

        End If


という感じで

作成日と更新日を求めることができます。



たとえばローカルに保存してあるHPの更新日を求めることで
そろそろ更新しておかなきゃとかなるわけですね

posted by kiyo at 13:31| ファイル | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。