gpt4 book ai didi

haskell - 使用 Haskell 下载维基百科标记

转载 作者:行者123 更新时间:2023-12-01 02:15:28 27 4
gpt4 key购买 nike

使用 http-conduit 我想下载任何页面的原始维基媒体标记,例如维基百科页面 Stack Overflow .

另外,我希望该解决方案适用于 en.wikipedia.org 以外的维基媒体页面。 ,例如 de.wikibooks.org .

注:这个问题立即以问答形式回答,因此故意不显示研究工作!

最佳答案

此问题使用 http-conduits 中的查询参数,如 in this previous SO answer 所述.

我们将使用描述的方法 here on SO下载页面的标记内容。

尽管使用 mediawiki 可以完成此任务,使用 ?action=raw 似乎要简单得多。方法而无需显式使用 API。

为了支持不同的页面(例如 en.wikimedia.org ),我写了两个函数 getWikipediaPageMarkupgetEnwikiPageMarkup ,前一个更通用并允许使用自定义域(任何域都应该工作,假设 Mediawiki 安装在 /wiki 下)。

{-# LANGUAGE OverloadedStrings #-}
import Network.HTTP.Conduit
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString.Lazy.Char8 as LB
import Network.HTTP.Types (urlEncode)
import Data.Monoid ((<>))

-- | Get the Mediawiki marup
getWikipediaPageMarkup :: ByteString -- ^ The wikipedia domain, e.g. "en.wikipedia.org"
-> ByteString -- ^ The wikipedia page title to download
-> IO LB.ByteString -- ^ The wikipedia page markup
getWikipediaPageMarkup domain page = do
let url = "https://" <> domain <> "/wiki/" <> urlEncode True page
request <- parseUrl $ B.unpack url
let request' = setQueryString [("action", Just "raw")] request
fmap responseBody $ withManager $ httpLbs request'

-- | Like @getWikipediaPageMarkup@, but hardcoded to 'en.wikipedia.org'
getEnwikiPageMarkup :: ByteString -> IO LB.ByteString
getEnwikiPageMarkup = getWikipediaPageMarkup "en.wikipedia.org"

请注意最近的 http-conduit版本是必需的(最低: 2.1 ,用 2.1.4 测试)以编译代码。

关于haskell - 使用 Haskell 下载维基百科标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com