import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class StockHolders { public static void main(String[] args) throws Exception { // Read NVDA's file (one GET, no key), naming your own project var request = HttpRequest.newBuilder( URI.create("https://tickerinside.com/api/v1/sec/nvda.json")) .header("User-Agent", "MyProject/1.0 (+https://example.com)") .build(); var response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.ofString()); if (response.statusCode() != 200) { throw new RuntimeException("HTTP " + response.statusCode()); } JsonObject stock = JsonParser.parseString(response.body()) .getAsJsonObject(); // How many funds hold it: in their issuers' files, and in SEC filings System.out.println("NVDA held_by " + stock.get("held_by") + " (issuer files), held_by_sec_nport " + stock.get("held_by_sec_nport") + " (SEC filings)"); // holders is sorted, largest weight first: [fund, weight %, file date] for (JsonElement h : stock.getAsJsonArray("holders")) { var row = h.getAsJsonArray(); System.out.println(row.get(0).getAsString() + " " + row.get(1) + " " + row.get(2).getAsString()); } // The line to print under any figure you quote System.out.println(stock.get("cite_as").getAsString()); } }