func CrawlPerson(httpClient doc.HttpClient, id string) (*Person, error) { site, user := ParsePersonId(id) switch site { case "github.com": u, err := GithubSpider.ReadUser(user) if err != nil { return nil, errorsp.WithStacksAndMessage(err, "ReadUser %s failed", id) } p := &Person{Id: id} for name, ri := range u.Repos { path := user + "/" + name p.Packages = append(p.Packages, "github.com/"+path) if err := store.UpdatePackage(site, path, func(info *stpb.PackageInfo) error { info.RepoInfo = ri return nil }); err != nil { log.Printf("UpdatePackage %v %v failed: %v", site, path, err) } else { log.Printf("UpdatePackage %v %v success", site, path) } } return p, nil case "bitbucket.org": p, err := doc.GetBitbucketPerson(httpClient, map[string]string{"owner": user}) if err != nil { return nil, errorsp.WithStacks(err) } return &Person{ Id: id, Packages: p.Projects, }, nil } return nil, nil }
func CrawlPerson(httpClient *http.Client, id string) (*Person, error) { site, username := ParsePersonId(id) switch site { case "github.com": p, err := doc.GetGithubPerson(httpClient, map[string]string{"owner": username}) if err != nil { return nil, villa.NestErrorf(err, "CrawlPerson(%s)", id) } else { return &Person{ Id: id, Packages: p.Projects, }, nil } case "bitbucket.org": p, err := doc.GetBitbucketPerson(httpClient, map[string]string{"owner": username}) if err != nil { return nil, villa.NestErrorf(err, "CrawlPerson(%s)", id) } else { return &Person{ Id: id, Packages: p.Projects, }, nil } } return nil, nil }