Skip to content

Instantly share code, notes, and snippets.

@krrrr38
Last active December 22, 2015 14:09
Show Gist options
  • Save krrrr38/6483717 to your computer and use it in GitHub Desktop.
Save krrrr38/6483717 to your computer and use it in GitHub Desktop.
ApacheAbdera使ってAtomPubのコレクションでPaging取得する on はてなブログAtomPub
import org.apache.abdera.Abdera
import org.apache.abdera.protocol.client.AbderaClient
import org.apache.abdera.protocol.client.RequestOptions
import org.apache.abdera.ext.wsse.WSSEAuthScheme;
import org.apache.abdera.model.Document
import org.apache.abdera.model.Entry
import org.apache.abdera.model.Feed
import org.apache.abdera.ext.history.FeedPagingHelper
import org.apache.commons.httpclient.UsernamePasswordCredentials
import scala.collection.JavaConversions._
object AtomPubFeed {
val maxPage = 5
val username = ""
val blogDomain = ""
val password = ""
val abdera = new Abdera
val abderaClient = new AbderaClient(abdera)
WSSEAuthScheme.register(abderaClient, true);
abderaClient.addCredentials("http://blog.hatena.ne.jp", null, "WSSE", new UsernamePasswordCredentials(username, password))
def main(args: Array[String]): Unit = {
val entries = getEntries(s"http://blog.hatena.ne.jp/$username/$blogDomain/atom/entry")
entries.foreach { entry =>
println("Entry Title: " + entry.getTitle)
println("Published: " + entry.getPublished)
entry.getCategories.foreach { cat =>
println("\tCategory: " + cat.getTerm)
}
}
}
def getEntries(feedUri: String) = {
def getEntriesR(page: Int, feedUri: String, entries: Seq[Entry]): Seq[Entry] =
if (page >= maxPage)
entries
else {
val response = abderaClient.get(feedUri)
val feed = response.getDocument.asInstanceOf[Document[Feed]].getRoot
val nextFeedUri = FeedPagingHelper.getNext(feed).toString
getEntriesR(page+1, nextFeedUri, feed.getEntries ++ entries)
}
getEntriesR(0, feedUri, Nil)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment