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に表示できないでしょうか?
> この日時を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
おっと。
> 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 も
レイアウトも分からないので、どの方法が良いとも言えませんが、
あつさんにとって都合がよさそうな方法を選択してみてください。
サンプルのURLではうまく動作しました。ありがとうございます。
応用がうまくいかず、「http://ameblo.jp/takahashiai-blog/page-2.html#main」からの日時取得がうまくいきません。
「XmlExceptionはハンドルされませんでした。」とエラーが出てしまいました。
それは 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
> あるいは、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
魔界の仮面弁士さんご丁寧にご指導いただきありがとうございます。
おかげさまでとても勉強になりました。
それらはとめることのできないものだ!(*・ω・)★ http://nn7.biz/image/show.cgi?20110506S004
編集 削除