Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bufio"
- "encoding/json"
- "fmt"
- "log"
- "net/http"
- "net/http/cookiejar"
- "os"
- "strings"
- "github.com/PuerkitoBio/goquery"
- )
- type BusquedaRespuestaJSON struct {
- Result int `json:"result"`
- Results []struct {
- ID json.RawMessage `json:"id"`
- Value string `json:"value"`
- Label string `json:"label"`
- } `json:"results"`
- }
- func main() {
- fmt.Println("Introduce el nombre de la película:")
- entradaEstandar := bufio.NewReader(os.Stdin)
- usuarioEntrada, errorUsusarioEntrada := entradaEstandar.ReadString('\n')
- if errorUsusarioEntrada != nil {
- log.Panic(errorUsusarioEntrada)
- }
- pelicula := strings.TrimSuffix(usuarioEntrada, "\n")
- jar, errorJar := cookiejar.New(nil)
- if errorJar != nil {
- log.Panic(errorJar)
- }
- cliente := &http.Client{
- Jar: jar,
- }
- peticionFA, errorPeticionFA := http.NewRequest("GET", "https://www.filmaffinity.com/es/main.html", nil)
- if errorPeticionFA != nil {
- log.Panic(errorPeticionFA)
- }
- respuestaFA, errorRespuestaFA := cliente.Do(peticionFA)
- if errorRespuestaFA != nil {
- log.Panic(errorRespuestaFA)
- }
- defer respuestaFA.Body.Close()
- if respuestaFA.StatusCode != 200 {
- log.Panic("Status code incorrecto ", respuestaFA.StatusCode)
- }
- busquedaQuery := "dataType=json&term=" + pelicula
- peticionBusqueda, errorPeticionBusqueda := http.NewRequest("POST", "https://www.filmaffinity.com/es/search-ac.ajax.php?action=searchTerm", strings.NewReader(busquedaQuery))
- if errorPeticionBusqueda != nil {
- log.Panic(errorPeticionBusqueda)
- }
- peticionBusqueda.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
- respuestaBusqueda, errorRespuestaBusqueda := cliente.Do(peticionBusqueda)
- if errorRespuestaBusqueda != nil {
- log.Panic(respuestaBusqueda)
- }
- defer respuestaBusqueda.Body.Close()
- if respuestaBusqueda.StatusCode != 200 {
- log.Panic("Status code incorrecto ", respuestaBusqueda.StatusCode)
- }
- var respuestaBusquedaJSON BusquedaRespuestaJSON
- errorRespuestaBusquedaJSON := json.NewDecoder(respuestaBusqueda.Body).Decode(&respuestaBusquedaJSON)
- if errorRespuestaBusquedaJSON != nil {
- log.Panic(errorRespuestaBusquedaJSON)
- }
- if len(respuestaBusquedaJSON.Results) == 0 {
- fmt.Println("Búsqueda sin resultados :(")
- return
- }
- peliculaID := string(respuestaBusquedaJSON.Results[0].ID)
- endPointPelicula := fmt.Sprint("https://www.filmaffinity.com/es/film", peliculaID, ".html")
- peticionPelicula, errorPeticionPelicula := http.NewRequest("GET", endPointPelicula, nil)
- if errorPeticionPelicula != nil {
- log.Panic(errorPeticionPelicula)
- }
- respuestaPelicula, errorRespuestaPelicula := cliente.Do(peticionPelicula)
- if errorRespuestaPelicula != nil {
- log.Panic(errorRespuestaPelicula)
- }
- defer respuestaPelicula.Body.Close()
- if respuestaPelicula.StatusCode != 200 {
- log.Panic("Status code incorrecto ", respuestaPelicula.StatusCode)
- }
- documento, documentoError := goquery.NewDocumentFromReader(respuestaPelicula.Body)
- if documentoError != nil {
- log.Panic(documentoError)
- }
- puntuacion := documento.Find("#movie-rat-avg").Text()
- fmt.Println("La película", pelicula, "tiene una puntuación media en Filmaffinity de", strings.TrimSpace(puntuacion))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement