webbrowserでAmebaブログを開きブログの作成日時をTextBoxに表示するには?

解決


あつ  2011-10-04 07:08:15  No: 147357

webbrowserに表示したAmebaブログで、ボタンを押すとmht形式に保存するソフトです。その際にファイル名をブログの作成日時にしたいのです。
ブログの作成日時をTextBoxに表示する方法を教えて下さい。
ブログをhtml形式で保存すると
<DIV class=entry>
<DIV class=entry_head><SPAN class=date>2011-10-01 13:27:22</SPAN> </DIV><!--//.entry_head-->
の箇所があるのでこの日時をTextBoxに表示できないでしょうか?


魔界の仮面弁士  2011-10-04 08:35:35  No: 147358

> この日時をTextBoxに表示できないでしょうか?
XDocument クラス経由で、blog のRSS の内容を
読み取ってみてはいかがでしょう。

たとえば、 http://ameblo.jp/koumei-aoyama/ の場合、RSS 2.0 フィードは
http://rssblog.ameba.jp/koumei-aoyama/rss20.xml なので、こんな感じ。

Dim rss As String = "http://headlines.yahoo.co.jp/rss/san_dom.xml"
Dim doc As XDocument = XDocument.Load(rss)

ListBox1.Items.Clear()
For Each item In doc.<rss>.<channel>.<item>
    Dim title As String = item.<title>.Value()
    Dim pubDate As String = item.<pubDate>.Value()
    Dim dt As Date = Date.Parse(pubDate)

    ListBox1.Items.Add(dt.ToString("yyyy-MM-dd HH:mm:ss"))
    ListBox1.Items.Add(title)
Next

あるいは、System.ServiceModel.Syndication.SyndicationFeedクラスを
用いるという手もあります。
http://www.atmarkit.co.jp/fdotnet/dotnettips/753rssfeed/rssfeed.html


魔界の仮面弁士  2011-10-04 08:46:20  No: 147359

おっと。
> Dim rss As String = "http://headlines.yahoo.co.jp/rss/san_dom.xml"
Dim rss As String = "http://rssblog.ameba.jp/koumei-aoyama/rss20.xml"

と書くつもりで間違えてしまいました。
(URL 部分は目的のサイトのものに合わせて変更してみてください)

あるいは、WebBrowse の Document プロパティから、対象のタグを追って
日付値を取得するという手もあります。内容によってはこちらの方が
良い場合もありますが、ブログのデザインが変更された場合には
対応しきれないのが弱点ですね。

このほかにも方法はいろいろあるかと思います。目的のブログの URL も
レイアウトも分からないので、どの方法が良いとも言えませんが、
あつさんにとって都合がよさそうな方法を選択してみてください。


あつ  2011-10-04 09:49:37  No: 147360

サンプルのURLではうまく動作しました。ありがとうございます。
応用がうまくいかず、「http://ameblo.jp/takahashiai-blog/page-2.html#main」からの日時取得がうまくいきません
「XmlExceptionはハンドルされませんでした。」とエラーが出てしまいました。


魔界の仮面弁士  2011-10-04 18:51:35  No: 147361

それは RSS 2.0 なページでは無く、XHTML 1.0 なページですよね。
http://ameblo.jp/takahashiai-blog/page-2.html
に対するフィードは
http://rssblog.ameba.jp/takahashiai-blog/rss20.xml
なので、この URL から取得してみてください。

Public Class Form1

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Dim URL As String = "http://rssblog.ameba.jp/takahashiai-blog/rss20.xml"

        Dim ds As New DataSet()
        Dim table As DataTable = ds.Tables.Add("rss")
        table.Columns.Add("書式日付")
        table.Columns.Add("title")
        table.Columns.Add("link", GetType(Uri))
        table.Columns.Add("pubDate", GetType(DateTimeOffset))
        table.Columns.Add("description")

        DataGridView1.Columns.Clear()
        DataGridView1.Columns.Add(New DataGridViewLinkColumn() With { _
                .DataPropertyName = "link", .HeaderText = "link", .Name = "link"})
        DataGridView1.DataSource = table

        Dim doc As XDocument = XDocument.Load(URL)
        For Each item In From x In doc.<rss>.<channel>.<item> _
                         Where Not x.<link>.Value().StartsWith("http://rss.rssad.jp/")
            Dim title As String = item.<title>.Value()
            Dim link As String = item.<link>.Value()
            Dim pubDate As String = item.<pubDate>.Value()
            Dim description As String = item.<description>.Value()
            Dim dt As DateTimeOffset = DateTimeOffset.Parse(pubDate)

            table.Rows.Add( _
                dt.ToString("yyyy-MM-dd HH:mm:ss"), _
                title, _
                New Uri(link), _
                dt, _
                description _
            ).AcceptChanges()
        Next

    End Sub

    Private Sub DataGridView1_CellContentClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
        If DataGridView1.Columns(e.ColumnIndex).Name = "link" Then
            Dim url As String = DataGridView1(e.ColumnIndex, e.RowIndex).Value.ToString() & "#main"
            WebBrowser1.Navigate(url)
        End If
    End Sub
End Class


魔界の仮面弁士  2011-10-04 19:05:47  No: 147362

> あるいは、WebBrowse の Document プロパティから、対象のタグを追って
> 日付値を取得するという手もあります。内容によってはこちらの方が
> 良い場合もありますが、ブログのデザインが変更された場合には
> 対応しきれないのが弱点ですね。

ちなみに、上記の場合はこんな感じ。

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Button1.Text = "日付読取"
        Button1.Enabled = False
        WebBrowser1.Navigate("http://ameblo.jp/takahashiai-blog/page-2.html#main")
    End Sub

    Private Sub WebBrowser1_DocumentTitleChanged(ByVal sender As Object, ByVal e As EventArgs) Handles WebBrowser1.DocumentTitleChanged
        Me.Text = WebBrowser1.DocumentTitle
    End Sub

    Private Sub WebBrowser1_Navigating(ByVal sender As Object, ByVal e As WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
        e.Cancel = Button1.Enabled
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Button1.Enabled = True
    End Sub

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        Dim span = From tag As HtmlElement In WebBrowser1.Document.GetElementsByTagName("span") Where tag.GetAttribute("className") = "date"
        Dim dt As String = span.First().InnerText
        MsgBox(dt)
    End Sub
End Class


あつ  2011-10-05 02:45:19  No: 147363

魔界の仮面弁士さんご丁寧にご指導いただきありがとうございます。
おかげさまでとても勉強になりました。


sonin  URL  2011-10-05 15:38:23  No: 147364

それらはとめることのできないものだ!(*・ω・)★ http://nn7.biz/image/show.cgi?20110506S004


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加