0

AtomフィードからHTMLコンテンツを抽出するのに問題があります。コントローラーでは、次のコマンドでAtomフィードを取得できます。

val feed = ws.WS.url("http://foo.blogspot.com/feeds/posts/default?max-results=4").get()
val blog = feed.await(5000).get.xml
Ok(views.html.news(blog))

参照されているニュースビューには、次のブロックがあります。

<div id="news">
     <ul class="thumbnails">
     @for( entry <- blog \ "entry") {
         @{var message = (entry \ "content").head match {case <content>{a}</content> => a.text }}
         <li class="span6 review"><div class="thumbnail">
             <article>
                <header><h2>@{(entry \ "title").text}</h2>
                    Published @{(entry \ "published").text}</header>
                 @Html({(entry \ "content" ).head match{case <content>{a}</content> => a.text} } )
                   </article></div></li>
     }
     </ul>
 </div>

'title'および'publishedのXMLコンテンツの読み取りは正常に機能しています。<content type="html">...</content>しかし、ブログ投稿のコンテンツを保持するエスケープされた文字列を含むhtmlをきれいに表示できません。予期しない文字が表示されるので(空白にする必要があります)、。

Play Framework 2.xを使用してAtomフィードからHTMLコンテンツを抽出するためのより良い方法を見つけた人はいますか?

4

1 に答える 1

0

これを行う方法の説明は、 https: //play.lighthouseapp.com/projects/82401/tickets/474-no-default-utf- の Play 2.0 チケット「JSON WS 応答本文のデフォルト UTF-8 文字セットなし」からのものです。 8-charset-for-json-ws-response-body

HTTP 1.1 のテキストのデフォルトの文字セットは ISO-8859-1 ですが、atom フィードでは UTF-8 が指定されていました。<content> タグの HMTL は ISO-8859-1 でエンコードされているようです。したがって、目標は、XML Elem を読み取り、内容を文字列に変換し、ISO-8859-1 から UTF-8 に変換することです。これが私のコードです:

@Html({
    (entry \ "content" ).head
        match{case <content>{a}</content> => 
            new String(a.text.getBytes("ISO-8859-1") , "UTF-8")
        }
 })

誰かがこれに欠陥を見つけた場合は、遠慮なく私のやり方の間違いを教えてください。

于 2012-11-10T03:42:34.930 に答える