Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Request for Adding List Categorization Functionality #482

Open
wavetg opened this issue Jun 5, 2023 · 0 comments
Open

Request for Adding List Categorization Functionality #482

wavetg opened this issue Jun 5, 2023 · 0 comments

Comments

@wavetg
Copy link

wavetg commented Jun 5, 2023

Hello, @simonecorsi

I noticed that this issue #161 has been open for nearly a year, but it seems that the GitHub official community hasn't been very proactive in following up. As a result, there is still no official API for lists. I find it quite regrettable. Of course, the lists feature is currently in beta, so it's somewhat understandable that there hasn't been much progress.

I have been following this issue #161 for a long time, and I'm also using the official Android client. Recently, I became curious about how the client implements the lists feature, so I captured some network packets and found that GraphQL is being used. I would like to dive deeper into it, but my abilities are limited. I'm not a software developer, so all I can do is provide you with some of the data packets I captured. The data returned by these APIs includes information about lists. I hope you can implement the functionality of categorizing based on lists soon.

Fetching lists

var request = require('request');
var options = {
   'method': 'POST',
   'url': 'https://api.github.com/graphql',
   'headers': {
      'Host': 'api.github.com',
      'User-Agent': 'GitHub/1.112.0 (com.github.android; build:719; Android 13; M2012K11AC)',
      'Authorization': 'Bearer PersonalAccessToken',
      'Content-Type': 'application/json',
      'Accept': '*/*',
      'Connection': 'keep-alive'
   },
   body: JSON.stringify({
      "operationName": "UserLists",
      "variables": {
         "login": "wavetg",
         "first": 100
      },
      "query": "query UserLists($login: String!, $first: Int) { user(login: $login) { id hasCreatedLists lists(first: $first) { nodes {  ...UserListFragment id } } } }  fragment UserListFragment on UserList { id name isPrivate description items { totalCount } }"
   })

};
request(options, function (error, response) {
   if (error) throw new Error(error);
   console.log(response.body);
});

Fetching starred repositories with lists information

Omit repetitive code, the key is the query string in the request body. Also, please pay attention to parameters: first , authorization , slug

   body: JSON.stringify({
      "operationName": "StarredRepositoriesQuery",
      "variables": {
         "login": "wavetg",
         "first": 100,
         "after": null
      },
      "query": "query StarredRepositoriesQuery($login: String!, $first: Int!, $after: String) { repositoryOwner(login: $login) { __typename ...NodeIdFragment ... on User { starredRepositories(first: $first, after: $after, orderBy: { field: STARRED_AT direction: DESC } ) { pageInfo { hasNextPage endCursor } nodes { __typename ...RepositoryListItemFragment ...IssueTemplateFragment id } } id } } }  fragment NodeIdFragment on Node { id __typename }  fragment avatarFragment on Actor { __typename ...NodeIdFragment avatarUrl }  fragment RepositoryStarsFragment on Repository { __typename id stargazerCount viewerHasStarred }  fragment RepositoryListItemFragment on Repository { __typename shortDescriptionHTML id name url isPrivate isArchived owner { __typename id login ...avatarFragment } primaryLanguage { color name id __typename } usesCustomOpenGraphImage openGraphImageUrl isInOrganization hasIssuesEnabled isDiscussionsEnabled isFork parent { name owner { id login } id __typename } ...RepositoryStarsFragment lists(first: 100, onlyOwnedByViewer: true) { nodes { id name __typename } } }  fragment IssueTemplateFragment on Repository { issueTemplates { name about title body filename } contactLinks { name about url } issueFormLinks { about name url } isBlankIssuesEnabled isSecurityPolicyEnabled securityPolicyUrl id __typename }"
   })

Fetching all repositories under a specific list

   body: JSON.stringify({
      "operationName": "FetchList",
      "variables": {
         "login": "wavetg",
         "slug": "ListName",
         "first": 100,
         "after": null
      },
      "query": "query FetchList($login: String!, $slug: String!, $first: Int!, $after: String) { list(login: $login, slug: $slug) { id name description user { __typename ...actorFields id } items(first: $first, after: $after) { pageInfo { hasNextPage endCursor } nodes { __typename ...RepositoryListItemFragment ...IssueTemplateFragment } totalCount } __typename } }  fragment NodeIdFragment on Node { id __typename }  fragment avatarFragment on Actor { __typename ...NodeIdFragment avatarUrl }  fragment actorFields on Actor { __typename login url ...avatarFragment ...NodeIdFragment }  fragment RepositoryStarsFragment on Repository { __typename id stargazerCount viewerHasStarred }  fragment RepositoryListItemFragment on Repository { __typename shortDescriptionHTML id name url isPrivate isArchived owner { __typename id login ...avatarFragment } primaryLanguage { color name id __typename } usesCustomOpenGraphImage openGraphImageUrl isInOrganization hasIssuesEnabled isDiscussionsEnabled isFork parent { name owner { id login } id __typename } ...RepositoryStarsFragment lists(first: 100, onlyOwnedByViewer: true) { nodes { id name __typename } } }  fragment IssueTemplateFragment on Repository { issueTemplates { name about title body filename } contactLinks { name about url } issueFormLinks { about name url } isBlankIssuesEnabled isSecurityPolicyEnabled securityPolicyUrl id __typename }"
   })

I have personally tested the above APIs, and they all return data successfully. If there are any errors, it might be due to some parameters that I may have missed, as I am not a software developer. However, if there are any omissions, I will do my best to assist and apologize for any inconvenience caused.

Thank you!😀

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant