Skip to content

Latest commit

 

History

History
 
 

wikipedia

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Wikipedia API

Brincando com ler dados da wikipedia

curl https://en.wikipedia.org/w/api.php\?action\=opensearch\&format\=json\&search\=golang
package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
	"reflect"
	"strings"
)

func main() {
	resp, err := http.Get("https://pt.wikipedia.org/w/api.php?action=opensearch&format=json&search=Go_(linguagem_de_programação)")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err)
	}

	//fmt.Println(string(body))

	var m []interface{}

	err = json.Unmarshal(body, &m)
	if err != nil {
		fmt.Println(err)
		return
	}

	r := make(map[string]int)
	walker(m, r)

	for k, v := range r {
		fmt.Println(k, v)
	}

	/*
		b, err := json.MarshalIndent(m, "", "\t")
		if err != nil {
			fmt.Println(err)
			return
		}

		fmt.Println(string(b))
	*/
}

// recursividade e reflection na mesma função... programador corajoso!
func walker(m interface{}, r map[string]int) {
	for _, v := range m.([]interface{}) {
		switch reflect.TypeOf(v).Kind() {
		case reflect.String:
			a := strings.Split(v.(string), " ")
			for _, s := range a {
				aux := r[s]
				aux++
				r[s] = aux
			}
		case reflect.Slice:
			walker(v, r)
		default:
			fmt.Println(v, reflect.TypeOf(v))
		}
	}
}