Elm:
Hämta en webbsida
Hur man gör:
import Http
import Html exposing (Html, text)
import Json.Decode as Decode
type Msg = GotPageContent (Result Http.Error String)
type alias Model = Maybe String
init : Model
init = Nothing
update : Msg -> Model -> (Model, Cmd Msg)
update (GotPageContent result) _ =
case result of
Ok pageContent ->
(Just pageContent, Cmd.none)
Err _ ->
(Just "Could not load the page.", Cmd.none)
view : Model -> Html Msg
view model =
case model of
Just content ->
text content
Nothing ->
text "Loading..."
subscription : Model -> Sub Msg
subscription _ =
Sub.none
main : Program () Model Msg
main =
Html.program
{ init = (init, fetchPage "http://example.com")
, view = view
, update = update
, subscriptions = subscription
}
fetchPage : String -> Cmd Msg
fetchPage url =
Http.get
{ url = url
, expect = Http.expectString GotPageContent
}
decoder : Decode.Decoder String
decoder =
Decode.string
Fördjupning
Historiskt sett har webbsidor hämtats med många olika tekniker, från enkla HTTP-anrop till komplexa webbskrapningsverktyg. Elm är en funktionell programmeringsspråk designad för webbutveckling, fokuserad på säkerhet och underhållbarhet. I Elm hanterar vi sidhämtning genom Http
-modulen. Alternativ till Elm för att ladda ner webbsidor inkluderar JavaScript med XMLHttpRequest eller Fetch API, eller serversidespråk som Python med requests-biblioteket.
Elms Http-paket använder “tasks”, vilket är Elm-specifika asynkrona operationer. Det är skräddarsytt för att jobba med Elm Runtime för att hantera sidoeffekter som nätverksanrop. Http.get-definierar hur du hämtar innehållet och vad du förväntar dig som svar - i vårt fall, en sträng. Felet hanteras i update-funktionen, där användaren antingen får innehållet eller ett felmeddelande.
Se även
- Elm’s officiella Http-paket dokumentation
- En guide till Elms arkitektur
- Json.Decode för att hantera JSON i Elm