{"id":17379,"date":"2021-08-14T18:33:12","date_gmt":"2021-08-14T16:33:12","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=17379"},"modified":"2021-09-17T12:02:32","modified_gmt":"2021-09-17T10:02:32","slug":"eth-kurs-und-gas-abfrage-per-java-rest-api-via-etherscan-io","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=17379","title":{"rendered":"ETH Kurs und Gas Abfrage per Java Rest API via etherscan.io"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/08\/wenzlaff.de-2021-08-14-um-18.09.57-220x300.png\" alt=\"\" width=\"220\" height=\"300\" class=\"aligncenter size-medium wp-image-17380\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/08\/wenzlaff.de-2021-08-14-um-18.09.57-220x300.png 220w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2021\/08\/wenzlaff.de-2021-08-14-um-18.09.57.png 610w\" sizes=\"auto, (max-width: 220px) 100vw, 220px\" \/><br \/>\nDie ETH Kurse bez. Gas Preise k\u00f6nnen leicht per Java Rest-API erzeugt werden. Auch der Kontostand einer Adresse kann abgefragt werden (default BUY_ME_A_COFFEE). So \u00fcberwache ich z.B. dauernd die <\/p>\n<p>BUY_ME_A_COFFEE = <strong>0x829F9e57c29ab683E964c76160B7B0BaB2727dD2<\/strong><\/p>\n<p>via Kommandozeile (und NodeRed) und warte bis jemand da was f\u00fcr Kaffee und Kuchen \u00fcberweist. Der aktuelle Wert reicht noch nicht ganz f\u00fcr zwei Personen in Hannover \ud83d\ude09 Wer also mal testen will &#8230;<\/p>\n<p>Wenn man sich auf <a href=\"https:\/\/etherscan.io\" rel=\"noopener\" target=\"_blank\">etherscan.io<\/a> angemeldet hat und <a href=\"https:\/\/etherscan.io\/login?cmd=last\" rel=\"noopener\" target=\"_blank\">einen Token hier<\/a> hinzugef\u00fcgt hat, kann man leicht die Abfrage machen. Es sind maximal 5 Abfragen pro Sekunde kostenlos m\u00f6glich:<\/p>\n<p><strong>-k Api-Token<\/strong><\/p>\n<p>Ausgabe:<\/p>\n<pre class=\"lang:default decode:true \" >[INFO ] 2021-08-14 18:09:44,225 Etherscan.main() - Start Etherscan abfrage ... \r\n[INFO ] 2021-08-14 18:09:45,166 Ausgabe.printGasPrice() - Letzter Block Nr.: 13024280\r\n[INFO ] 2021-08-14 18:09:45,167 Ausgabe.printGasPrice() - Gas Preis: 39 Gwei, Propose Gas Preis: 41 Gwei, Fast Gas Preis: 52 Gwei\r\n[INFO ] 2021-08-14 18:09:45,720 Ausgabe.printETHPreis() - Kurs f\u00fcr 1 ETH: 3264.33 Dollar\r\n[INFO ] 2021-08-14 18:09:46,275 Ausgabe.printAdressBetrag() - Stand: 0.00451771 Ether auf Adresse: 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2<\/pre>\n<p>Der ganze Beispiel-Code liegt auf GitLab unter <a href=\"https:\/\/gitlab.com\/IT-Berater\/twetherscan\" rel=\"noopener\" target=\"_blank\">TWEtherScan<\/a>.<\/p>\n<p>Hier der Beispiel Code: <!--more--><\/p>\n<pre class=\"lang:java decode:true \" >\r\n\r\n@Command(name = \"TWEtherscan\", mixinStandardHelpOptions = true, version = \"TWEtherscan 1.0\", description = \"Abfrage von EtherScan Api.\", showDefaultValues = true, footer = {\r\n\t\t\"@|fg(green) Thomas Wenzlaff|@\",\r\n\t\t\"@|fg(red),bold http:\/\/www.wenzlaff.info|@\" })\r\npublic class Etherscan implements Callable&lt;Integer&gt; {\r\n\r\n\t\/**\r\n\t * Eine echte ETH Adresse von mir, f\u00fcr Trinkgeld ;-)\r\n\t *\/\r\n\tprivate final static String BUY_ME_A_COFFEE = \"0x829F9e57c29ab683E964c76160B7B0BaB2727dD2\";\r\n\r\n\tprivate static final Logger LOG = LogManager.getLogger(Etherscan.class);\r\n\r\n\t@Option(names = { \"-k\",\r\n\t\t\t\"--apikey\" }, description = \"der Etherscan Api Token\", required = true)\r\n\tprivate String etherscanApiToken;\r\n\r\n\t@Option(names = { \"-a\",\r\n\t\t\t\"--adresse\" }, description = \"die Ether (ETH) Adresse\", defaultValue = BUY_ME_A_COFFEE)\r\n\tprivate String etherAdresse;\r\n\r\n\t@Option(names = { \"-g\",\r\n\t\t\t\"--gas\" }, description = \"Gibt den Gas Preis aus\", defaultValue = \"true\")\r\n\tprivate static boolean isGas;\r\n\r\n\t@Option(names = { \"-p\",\r\n\t\t\t\"--preis\" }, description = \"Gibt den Kurs aus\", defaultValue = \"true\")\r\n\tprivate static boolean isPreis;\r\n\r\n\t@Option(names = { \"-b\",\r\n\t\t\t\"--betrag\" }, description = \"Gibt Betrag zu einer Adresse aus\", defaultValue = \"true\")\r\n\tprivate static boolean isAdress;\r\n\r\n\tpublic static void main(String[] args) throws Exception {\r\n\t\tLOG.info(\"Start Etherscan abfrage ... \");\r\n\t\tnew CommandLine(new Etherscan()).execute(args);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic Integer call() throws Exception {\r\n\r\n\t\tif (isGas)\r\n\t\t\tAusgabe.printGasPrice(etherscanApiToken);\r\n\r\n\t\tif (isPreis)\r\n\t\t\tAusgabe.printETHPreis(etherscanApiToken);\r\n\r\n\t\tif (isAdress)\r\n\t\t\tAusgabe.printAdressBetrag(etherscanApiToken, etherAdresse);\r\n\r\n\t\treturn 0;\r\n\t}\r\n}<\/pre>\n<p>Hier alle m\u00f6glichen Parameter:<\/p>\n<pre class=\"lang:default decode:true \" >Usage: TWEtherscan [-bghpV] [-a=&lt;etherAdresse&gt;] -k=&lt;etherscanApiToken&gt;\r\nAbfrage von EtherScan Api.\r\n  -a, --adresse=&lt;etherAdresse&gt;\r\n                  die Ether (ETH) Adresse\r\n                    Default: 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2\r\n  -b, --betrag    Gibt Betrag zu einer Adresse aus\r\n  -g, --gas       Gibt den Gas Preis aus\r\n  -h, --help      Show this help message and exit.\r\n  -k, --apikey=&lt;etherscanApiToken&gt;\r\n                  der Etherscan Api Token\r\n  -p, --preis     Gibt den Kurs aus\r\n  -V, --version   Print version information and exit.<\/pre>\n<p>\u00dcbrigens ist ETH <a href=\"http:\/\/kleinhirn.eu\/2021\/08\/11\/pre-mined\/\" rel=\"noopener\" target=\"_blank\">pre-mined<\/a> (danke Dr.Kleinhirn.eu).<\/p>\n<p>Der eigentliche Rest-Code liegt in der Klasse Rest.java<\/p>\n<pre class=\"lang:java decode:true \" >public class Rest {\r\n\r\n\tprivate final static String ETHERSCANN_BALANCE_URL = \"https:\/\/api.etherscan.io\/api?module=account&amp;action=balance&amp;address=\";\r\n\r\n\tprivate final static String ETHERSCANN_GAS_PRICE_URL = \"https:\/\/api.etherscan.io\/api?module=gastracker&amp;action=gasoracle&amp;apikey=\";\r\n\r\n\tprivate final static String ETHERSCANN_ETH_PRICE_URL = \"https:\/\/api.etherscan.io\/api?module=stats&amp;action=ethprice&amp;apikey=\";\r\n\r\n\tpublic static String getAdressInfo(String apiToken, String ethAdresse) {\r\n\t\treturn ETHERSCANN_BALANCE_URL + ethAdresse + \"&amp;tag=latest&amp;apikey=\"\r\n\t\t\t\t+ apiToken;\r\n\t}\r\n\r\n\tpublic static String getGasPrice(String apiToken) {\r\n\t\t\/\/ Returns the current price per gas in wei,\r\n\t\t\/\/ https:\/\/etherscan.io\/apis#proxy\r\n\t\treturn ETHERSCANN_GAS_PRICE_URL + apiToken;\r\n\t}\r\n\r\n\tpublic static String getEthPrice(String apiToken) {\r\n\t\t\/\/ Get ETHER Last Price,\r\n\t\t\/\/ https:\/\/etherscan.io\/apis#stats\r\n\t\treturn ETHERSCANN_ETH_PRICE_URL + apiToken;\r\n\t}\r\n\r\n\tpublic static HttpResponse&lt;String&gt; getRequest(String url)\r\n\t\t\tthrows IOException, InterruptedException {\r\n\t\tHttpRequest request = HttpRequest.newBuilder().uri(URI.create(url))\r\n\t\t\t\t.method(\"GET\", HttpRequest.BodyPublishers.noBody()).build();\r\n\r\n\t\tHttpResponse&lt;String&gt; response = HttpClient.newHttpClient()\r\n\t\t\t\t.send(request, HttpResponse.BodyHandlers.ofString());\r\n\r\n\t\treturn response;\r\n\t}\r\n}\r\n<\/pre>\n<p>Wie immer, Erweiterungen und Vorschl\u00e4ge gern als <a href=\"https:\/\/gitlab.com\/IT-Berater\/twetherscan\/-\/merge_requests\" rel=\"noopener\" target=\"_blank\">Merge-Request<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die ETH Kurse bez. Gas Preise k\u00f6nnen leicht per Java Rest-API erzeugt werden. Auch der Kontostand einer Adresse kann abgefragt werden (default BUY_ME_A_COFFEE). So \u00fcberwache ich z.B. dauernd die BUY_ME_A_COFFEE = 0x829F9e57c29ab683E964c76160B7B0BaB2727dD2 via Kommandozeile (und NodeRed) und warte bis jemand da was f\u00fcr Kaffee und Kuchen \u00fcberweist. Der aktuelle Wert reicht noch nicht ganz f\u00fcr &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=17379\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eETH Kurs und Gas Abfrage per Java Rest API via etherscan.io\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,4606,5,79,1319],"tags":[2424,4597,4990,4992,4991,2178,3109,167,2487,3929],"class_list":["post-17379","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-crypto","category-java","category-programmierung","category-sicherheit-2","tag-abfrage","tag-crypto","tag-eth","tag-ethereum","tag-etherscan-io","tag-java","tag-kurs","tag-programmieren","tag-rest","tag-rest-api"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/17379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17379"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/17379\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17379"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}