let s:HTTP = SpaceVim#api#import('web#http') "" " @public " Get all users " " Github API : GET /users function! github#api#users#GetAllUsers() abort return github#api#util#Get('users', []) endfunction function! github#api#users#starred(user, page) abort let result = s:HTTP.get('https://api.github.com/users/' . \ a:user . '/starred' . '?page=' . a:page) if result.status ==# 200 return json_decode(result.content) endif " if the command run failed, return empty list return [] endfunction function! github#api#users#starred_pages(user) abort let result = s:HTTP.get('https://api.github.com/users/' . a:user . '/starred') if result.status ==# 200 let i = filter(result.header, 'v:val =~# "^Link"')[0] return split(matchstr(i,'=\d\+',0,2),'=')[0] endif return 0 endfunction function! github#api#users#GetStarred(user) abort let rel = [] let pages = github#api#users#starred_pages(a:user) for page in range(1,pages) let repos = github#api#users#starred(a:user, page) for repo in repos call add(rel, repo) endfor endfor return rel endfunction " get a single user " GET /users/:username function! github#api#users#GetUser(username) abort return github#api#util#Get('users/' . a:username, []) endfunction "List followers of a user "GET /users/:username/followers function! github#api#users#ListFollowers(username) abort let followers = [] for i in range(1,github#api#util#GetLastPage('users/' . a:username . '/followers')) call extend(followers,github#api#util#Get('users/' . a:username . '/followers?page=' . i, [])) endfor return followers endfunction "List users followed by another user "GET /users/:username/following function! github#api#users#ListFollowing(username) abort let following = [] for i in range(1,github#api#util#GetLastPage('users/' . a:username . '/following')) call extend(following,github#api#util#Get('users/' . a:username . '/following?page=' . i, [])) endfor return following endfunction "" " @public " List orgs of a specified user. " " Github API : /users/:username/orgs function! github#api#users#ListAllOrgs(user) abort return github#api#util#Get(join(['users', a:user, 'orgs'], '/')) endfunction "" " @public " Check if one user follows another " " Github API : GET /users/:username/following/:target_user function! github#api#users#CheckTargetFollow(username,target) abort return github#api#util#GetStatus(join(['users', a:username, 'following', a:target], '/'),[]) endfunction