안녕하세요 망원경

8992 단어 opensource


망원경이란?



Telescopeplanet의 예입니다.
블로그 피드 집계. 오래전부터 뉴스를 보던 구글 리더가 생각난다.

설정 환경



저는 KDE Plasma Desktop을 사용하여 fedora33에서 작업하고 있습니다. Docker는 여전히 CgroupsV2를 지원하지 않습니다. 도커를 설치하는데 시간이 조금 걸리고 설치에 대한 블로그 포스트를 작성했습니다.

어떤 이유로 redis에 다음과 같은 경우 권한 오류가 발생합니다docker-compose.

Starting telescope_redis_1        ... done 
Starting telescope_elasticsearch_1 ... done 
Attaching to telescope_redis_1, telescope_elasticsearch_1 
redis_1         | find: '.': Permission denied 
redis_1         | chown: changing ownership of '.': Permission denied 
telescope_redis_1 exited with code 1 


그래서 Redis를 sudo dnf install redis로 설치하고 시작했습니다.redis-server
다른 부분은 다 잘되서 그냥 따라했습니다environment-setup.md

goURL 수정



망원경의 REST API로 작업하기 위해 새 플래그-u --url를 추가했습니다.
json 데이터, 데이터를 게시물 조각으로 변환, 각 게시물의 내용 가져오기
URL. 이 작업을 수행하기 위해 새로운 기능을 하나 추가했습니다. 아래는 차이점입니다.
만들어진.

git diff HEAD main.go utils.go > lab6.diff


차이점

diff --git c/main.go w/main.go
index 4679a1a..fd3d249 100644
--- c/main.go
+++ w/main.go
@@ -25,6 +25,7 @@ var js = flag.BoolP("json", "j", false, "output json format to stdout")
 var fp = flag.StringP("file", "f", "", "file name to check")
 var ignore = flag.BoolP("ignore", "i", false, "ignore url patterns")
 var failOnly = flag.Bool("fails", false, "show only urls that failed")
+var urlFlag = flag.BoolP("url", "u", false, "read telescope restful API")

 func main() {
    flag.Parse()
@@ -43,14 +44,20 @@ go run main.go -v or --version check version.
        os.Exit(-1)
    }

-   dat, err := ioutil.ReadFile(*fp)
-   check(err)
-
+   var urls []string
+   var dat []byte
+   if *urlFlag {
+       dat = dataTelscope()
+   } else {
+       var err error
+       dat, err = ioutil.ReadFile(*fp)
+       check(err)
+   }
    // use xurls tool to exact links from file. Strict mod only match http://
    // and https:// schema
    rxStrict := xurls.Strict()
    // urls is a slice of strings
-   urls := rxStrict.FindAllString(string(dat), -1)
+   urls = rxStrict.FindAllString(string(dat), -1)
    urls = removeDuplicate(urls)

    if *ignore {
diff --git c/utils.go w/utils.go
index 5c27fc7..aee4859 100644
--- c/utils.go
+++ w/utils.go
@@ -2,7 +2,9 @@ package main

 import (
    "bufio"
+   "encoding/json"
    "fmt"
+   "io/ioutil"
    "log"
    "net/http"
    "os"
@@ -18,6 +20,43 @@ type urlStatus struct {
    Status int
 }

+type post struct {
+   ID  string
+   URL string
+}
+
+func dataTelscope() []byte {
+   var data []byte
+   var posts []post
+   resp, err := http.Get("http://localhost:3000/posts")
+   check(err)
+   defer resp.Body.Close()
+
+   if resp.StatusCode == http.StatusOK {
+       body, err := ioutil.ReadAll(resp.Body)
+       check(err)
+       if err := json.Unmarshal(body, &posts); err != nil {
+           panic(err)
+       }
+       for _, p := range posts {
+           resp, err := http.Get("http://localhost:3000" + p.URL)
+           if err != nil {
+               fmt.Println(err)
+           }
+           defer resp.Body.Close()
+           if resp.StatusCode == http.StatusOK {
+               bodyData, err := ioutil.ReadAll(resp.Body)
+               if err != nil {
+                   fmt.Println(err)
+               }
+               data = append(data, bodyData...)
+           }
+       }
+   }
+
+   return data
+}
+
 func removeDuplicate(urls []string) []string {
    result := make([]string, 0, len(urls))
    temp := map[string]struct{}{}


요지 버전은 여기https://gist.github.com/yzwdroid/26b6cb71f75f3799dfccd5fb0ed9ec79

좋은 웹페이지 즐겨찾기