Feedly APIを使用してみる(4) エントリー記事の取得
前記事ではユーザー情報、サブスクリプション情報(カテゴリ、フィード)の取得について記載しました。今回は実際に、前回取得したユーザー情報、カテゴリ情報、フィード情報などを利用して、記事を取得していきます。
開発環境
・ Windows10
・ Microsoft Visual Studio 2019 (VB .NET)
・ Feedly(https://feedly.com/)プラン:Pro
記事の取得と表示
サンプルプログラムでは、以下の操作により記事を取得するようにしています。
〇全取得ボタンのクリック
カテゴリに含まれる全ての記事を取得し、表示します。
〇カテゴリ一覧で、対象のカテゴリをダブルクリック
対象カテゴリに含まれる記事を取得し、表示します。
〇Feed一覧で、対象のフィードをダブルクリック
対象フィードに含まれる記事を取得し、表示します。
また「未読のみ」にチェックすることで、未読記事のみを取得することができます。
取得操作は上記の通り異なっていますが、記事は全て以下の関数で取得しています。
引数を変えることで、上記の条件に該当する記事を取得しています。
RSSharp.Feedly.ApiCalls.Streams.entries_list=
RSSharp.Feedly.ApiCalls.get_entries_in_stream(
access_token As String,
stream_id As String,
Optional count As Integer? = Nothing,
Optional ranked As String = Nothing,
Optional unread_only As Boolean? = Nothing,
Optional newer_than As Long? = Nothing, Optional continuation As String = Nothing)
・access_token(アクセストークン)
アクセストークンを指定します。
・stream_id(ストリームID)
取得するカテゴリやフィードの情報を渡します。
ここで渡すコマンドを上記の操作により、変更します。
〇全取得ボタンクリック時
“user/” & ユーザーID & “/category/global.all”
ユーザーID=ユーザー情報取得で取得したID(RSSharp.Feedly.Model.Profile.id)を動的にセットします。category/global.allは指定されたユーザーのカテゴリに登録されている記事を全て取得するコマンドです。
〇カテゴリ一覧で対象のカテゴリをダブルクリック時
カテゴリ一覧作成時に取得したサブスクリプションのカテゴリID(※)を指定します。
※RSSharp.Feedly.Model.Subscription.categories(0).id
〇Feed一覧で対象のフィードをダブルクリック時
Feed一覧作成時に取得したサブスクリプションのフィードID(※)を指定します。
※RSSharp.Feedly.Model.Subscription.id
・count(件数)
記事を取得する件数になります。
10とした場合は、10件まで取得します。
なお、一度に最大で取得できる件数は1000件になります。1000件を超える件数、
例えば100000等を渡してもエラーにはなりませんが、取得できる件数は1000件です。
・ranked(ランク)
取得順を最新、最古、人気記事順など指定できます。何も指定しなければ最新になります。
・unread_only(未読のみ)
Trueにすれば未読のみが取得できます。デフォルトはFalse(既読含む)です。
・newer_than
最新から何日前までのものを取得するかをタイムスタンプで指定できます。(最大31日前まで)
☆サンプルプログラムでは使用していませんが、これを使用することで、
前回取得した時間以降に更新された記事だけを取得することができます。
一度取得した記事を、重複して取得しないなどの用途で使用できそうです。。。
・continuation(継続番号)
取得した記事が1000件を超えている場合に、取得した情報に含まれるcontinuationコードを
使用することで、次の1001以降のデータを継続して取得できるようです。
(サンプルプログラムでは未確認です)
サンプルプログラムの画面です。Feedlyより記事情報を取得し、表示しています。
☆ここで取得している情報はFeedlyより取得できる情報の一部です。
とりあえず、これだけあれば、使えそうかなって情報を出してます。
①記事一覧
Feedlyより記事を取得し、一覧を表示します。
未読記事か既読済か、記事の投稿時間、フィード名、記事タイトルを表示しています。
②記事内容
記事一覧で選択した記事内容を表示します。
カテゴリ名、WEBサイトURL、コンテンツ内容、登録されてるキーワード
' 全取得、カテゴリ一覧、Feed一覧により、データを取るコマンドを変更しています。
If bType = 1 Then
' 全件取得コマンド(category/global.allで、カテゴリに登録されている全ての記事を取得します)
setCmd = "user/" & rssPro.id & "/category/global.all"
ElseIf bType = 2 Then
' カテゴリ指定
If lstCate.SelectedIndex < 0 Then
MsgBox("カテゴリが選択されていません!")
Exit Sub
End If
lstIdx = lstCate.SelectedIndex
If cateList(lstIdx).cID = "NoID" Then
MsgBox("カテゴリなしなので、フィードで実行して下さい!")
Exit Sub
End If
' カテゴリの場合は、カテゴリIDを指定するだけです。
setCmd = cateList(lstIdx).cID
ElseIf bType = 3 Then
' Feed指定
If lstFeed.SelectedIndex < 0 Then
MsgBox("Feedが選択されていません!")
Exit Sub
End If
lstIdx = lstFeed.SelectedIndex
' フィードの場合は、フィードIDを指定するだけです。
setCmd = feedList(lstIdx).fID
End If
' ストリームエントリを取る。
Try
' 取得種別(未読のみのチェックボックスにチェックが入っている場合は未読記事のみを取得します)
If chkUnRead.Checked = True Then
' 未既読のみ
entriVal = RSSharp.Feedly.ApiCalls.Streams.get_entries_in_stream(pAccessTkn, setCmd, 1000,, True)
Else
' 全て
entriVal = RSSharp.Feedly.ApiCalls.Streams.get_entries_in_stream(pAccessTkn, setCmd, 1000,,,)
End If
' entriVal(型:RSSharp.Feedly.ApiCalls.Streams.entries_list)に記事が格納されます。
Catch ex As Exception
End Try
' 0件の場合
If entriVal.items Is Nothing OrElse entriVal.items.Count = 0 Then
MsgBox("データがありません!")
Exit Sub
End If
lblEntryCnt.Text = entriVal.items.Count.ToString & "件"
' 表示エリアに表示する。
Dim setData As String
Dim setRead As String
Dim setTime As String
For i = 0 To entriVal.items.Count - 1
' 既読、未読(unreadで既読か未読かを判定できます)
If entriVal.items(i).unread = True Then
setRead = "【未読】"
Else
setRead = "【既読】"
End If
' 投稿時間(crawledで記事の投稿時間を取得できます。タイムスタンプのため時間へ変換)
setTime="【" & DateTimeOffset.FromUnixTimeMilliseconds(
entriVal.items(i).crawled).ToLocalTime.ToString.Substring(0, 19) & "】"
' セットデータ(origin.title=フィードタイトル title=記事タイトル)
setData = setRead & setTime & "【" & entriVal.items(i).origin.title & "】" & entriVal.items(i).title
lstEntry.Items.Add(setData)
Next
' ①記事一覧で取得した'entriVal(型:RSSharp.Feedly.ApiCalls.Streams.entries_list)より詳細な情報を表示
' カテゴリ(categories)よりカテゴリ情報を取得
' 記事には複数のカテゴリが登録可能なのでcategoriesは登録されている全てのカテゴリが含まれます。
' サンプルプログラムでは1件目のみ表示してます。
If entriVal.items(lstIdx).categories Is Nothing = False Then
lblCate.Text = entriVal.items(lstIdx).categories(0).label
End If
' コンテンツデータ(summary.contentでコンテンツデータ取得)
If entriVal.items(lstIdx).summary Is Nothing = False Then
contentData = entriVal.items(lstIdx).summary.content
Else
contentData = "[no content]"
End If
txtContent.Text = contentData
' リンク(alternate(0).hrefでサイトURLを取得)
If entriVal.items(lstIdx).alternate(0).href Is Nothing = False Then
lblLink.Text = entriVal.items(lstIdx).alternate(0).href
End If
' キーワード(keywordsで登録されている全てのキーワードを取得できます)
If entriVal.items(lstIdx).keywords Is Nothing = False Then
For i = 0 To entriVal.items(lstIdx).keywords.Count - 1
If i = 0 Then
keyData = "【" & entriVal.items(lstIdx).keywords(i) & "】"
Else
keyData = keyData & "【" & entriVal.items(lstIdx).keywords(i) & "】"
End If
Next
txtKeyword.Text = keyData
End If
次回は、いよいよ最後になります。
未読記事を既読にする操作と、API回数の管理に関して紹介したいと思います。