You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用GitHub GraphQL实现增量加载Issues(替代REST的since参数)

实现GitHub GraphQL Issues增量加载的正确方式

GitHub GraphQL的issues字段并不支持直接传入since参数,你之前遇到的错误就是因为这个原因。要实现增量加载,需要通过filter参数结合时间条件来过滤数据,以下是具体方案:

方案1:按创建时间过滤新Issue

通过filter.created.since指定时间范围,只拉取该时间之后创建的Issue。修改后的查询如下:

ISSUES_QUERY = """
query($owner: String!, $name: String!, $issues_per_page: Int!, $first_reactions: Int!, $first_comments: Int!, $page_after: String, $since: DateTime!) {
  repository(owner: $owner, name: $name) {
    issues(
      first: $issues_per_page,
      orderBy: {field: CREATED_AT, direction: DESC},
      after: $page_after,
      filter: {created: {since: $since}}
    ) {
      totalCount
      pageInfo {
        endCursor
        hasNextPage
      }
      nodes {
        id
        number
        createdAt
        # 其他你需要的字段
      }
    }
  }
}
"""

方案2:按更新时间过滤(含新增和修改的Issue)

如果需要同步新创建和已更新的Issue,改用filter.updated.since:

ISSUES_QUERY = """
query($owner: String!, $name: String!, $issues_per_page: Int!, $first_reactions: Int!, $first_comments: Int!, $page_after: String, $since: DateTime!) {
  repository(owner: $owner, name: $name) {
    issues(
      first: $issues_per_page,
      orderBy: {field: UPDATED_AT, direction: DESC},
      after: $page_after,
      filter: {updated: {since: $since}}
    ) {
      totalCount
      pageInfo {
        endCursor
        hasNextPage
      }
      nodes {
        id
        number
        createdAt
        updatedAt
        # 其他你需要的字段
      }
    }
  }
}
"""

关键注意事项

  • 变量类型:$since的类型是DateTime!,必须传入ISO 8601格式的时间字符串(例如2024-05-20T00:00:00Z,Z表示UTC时区),避免时区偏差。
  • 增量时间记录:需要保存上次同步的时间戳(可存在BigQuery的元数据表、本地配置文件或缓存服务中),每次运行时读取该时间作为$since的值,运行结束后更新为当前UTC时间。
  • 分页处理:即使过滤后数据量较少,仍需通过page_after和pageInfo.endCursor处理分页,直到pageInfo.hasNextPage为false时停止拉取。

内容的提问来源于stack exchange,提问作者Aman Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 23:02:32