# List of Livebook Smart Cells on Github ```elixir Mix.install([ {:kino, "~> 0.12"}, {:req, "~> 0.4"}, {:req_github_paginate, github: "acalejos/req_github_paginate"} ]) ``` ## Section ```elixir defmodule Kino.Spinner do def new() do Kino.HTML.new("""
""") end end ``` ```elixir defmodule GitHubAPI do def headers(), do: %{ "Accept" => "application/vnd.github+json", "Authorization" => "Bearer #{System.fetch_env!("LB_GITHUB_TOKEN")}", "X-GitHub-Api-Version" => "2022-11-28" } def params(), do: [ q: "use Kino.SmartCell in:file language:elixir", per_page: 100, page: 1 ] def new() do Req.new(base_url: "https://api.github.com") |> ReqGitHubPaginate.attach() end def _get_all(request, params) do resp = Req.get!( request, url: "/search/code", params: params, headers: headers() ) if Keyword.has_key?(resp.headers["link"], :next) do {_, params} = Map.pop(resp.headers["link"][:next], "url") resp.body["items"] ++ _get_all(request, params) else resp.body["items"] end end def get_all(request) do _get_all(request, params()) end end ``` ```elixir frame = Kino.Frame.new() |> Kino.render() Kino.Frame.append(frame, Kino.Spinner.new()) ``` ```elixir items = GitHubAPI.new() |> GitHubAPI.get_all() nil ``` ```elixir table = for repo <- items, repo["repository"]["owner"]["login"] != "livebook-dev" do %{ "Name" => repo["repository"]["name"], "Description" => repo["repository"]["description"], "URL" => repo["repository"]["html_url"] } end |> Kino.DataTable.new(name: "Smart cells") Kino.Frame.render(frame, table) ```