Stapelaustausch-Abstimmungszähler


40

Schreiben Sie ein Programm / eine Funktion, die die Stimmenzahl ihrer eigenen Stack Exchange-Antwort zum Zeitpunkt ihrer Ausführung zurückgibt.

  • Ihr Programm / Ihre Funktion kann jedoch über das Internet auf diese Seite ( codegolf.stackexchange.com/questions/82609 ) zugreifen :
  • Ihr Programm / Ihre Funktion akzeptiert möglicherweise keine Benutzereingaben und
  • Die Verwendung von URL-Kürzern ist nicht gestattet
  • Ihr Programm / Ihre Funktion verwendet möglicherweise nur die eigene Quelle als Bezugspunkt für die Anzahl der Stimmen (zum Beispiel: keine Verweise auf Textfolgen in der enthaltenen Antwort, aber nicht in der eigenen Quelle).
  • Ihr Programm / Ihre Funktion muss eine eigene Stimmenzahl und nur eine eigene Stimmenzahl ausgeben (zum Beispiel: keine Rückgabe aller Stimmenzahlen auf dieser Seite).

Das ist Code-Golf, der kürzeste Code gewinnt.


perl -e'($_)=`curl -s http://api.stackexchange.com/2.2/posts/123?site=codegolf`;/score":(\d+)/&&print$1'sieht aus wie es funktionieren sollte, tut es aber nicht. Aber vielleicht kann das jemand nutzen.
msh210

7
Allen anderen, die versuchen und die API nicht verwenden: Sie stellt die Antwort gzip-codiert bereit, auch wenn der Client dies nicht unterstützt.
Dennis

13
"Ihr Programm / Ihre Funktion verwendet möglicherweise nur die eigene Quelle als Bezugspunkt für die Stimmenzahl." Ist ein bisschen verwirrend. Bedeutet dies, dass Antworten versuchen sollten, sich nur durch Kenntnis ihres eigenen Codes und nicht durch eine Beitrags-ID zu identifizieren? Ich denke nicht, dass eine solche Regel gut wäre, da sie von jedem anderen, der eine neue Antwort veröffentlicht, gebrochen werden kann.
FryAmTheEggman

@FryAmTheEggman Ich habe ein wenig darüber nachgedacht, die Antworten anderer Leute zu knacken, und ich habe sogar darüber nachgedacht, dies zu einem KOTH zu machen, bei dem Ihre Quelle versucht, eine andere Antwort zu untergraben, obwohl dies letztendlich das Format mehr voranzutreiben schien, als ich wollte ... Ich habe das using its own sourceBit hinzugefügt , um Benutzer daran zu hindern, die Seite einzurichten, damit sie leichter zu finden ist, ohne zur Byte-Anzahl beizutragen, falls die Antwort nicht die Post-ID-Methode verwendet.
Dendrobium

2
Okay, die Formulierung ist ein bisschen komisch. Ich würde empfehlen, anstatt ein bestimmtes Verhalten auf diese Weise zuzulassen, die Nutzung von Webdiensten, die nicht von stackexchange bereitgestellt werden, direkt zu verbieten (sofern ich Sie nicht falsch verstanden habe). Als Randnotiz ist es aufgrund der Art des Vollständigkeitsproblems nicht möglich, so etwas unzerbrechlich zu machen. Das Beste, was Sie tun können, ist, es unplausibel zu machen, gebrochen zu werden.
FryAmTheEggman

Antworten:


39

jQuery + JavaScript, 85 Byte

$.get("//api.stackexchange.com/posts/82610?site=codegolf",d=>alert(d.items[0].score))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Geschichte

  • -6 Bytes, weil ich die Variable dataanstelle von verwendet habe d.
  • -3 Bytes dank @ msh210
  • -13 Bytes dank @ CᴏɴᴏʀO'Bʀɪᴇɴ
  • -4 Bytes dank @ user6188402
  • -5 Bytes dank @Suever
  • -4 Bytes dank @RobW

Empfohlene Verwendung

  • Führen Sie das Snippet aus.
  • Upvote.
  • Führen Sie Snippet aus und lassen Sie sich überraschen, wenn die Anzahl magisch steigt.

Bonus!!

Wem gefällt ein Bonus nicht?

$.getJSON("//api.stackexchange.com/posts/" + prompt() + "?site=codegolf",d=>alert(d.items[0].score));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Geben Sie die ID in den Bonus ein und es wird Ihnen die Punktzahl angezeigt.

Noch mehr Bonus !! Führen Sie dieses Snippet aus, um das Programm automatisch zu starten, zu aktualisieren und erneut auszuführen! (Benötigt rep> 15, auth). Wenn es nicht funktioniert, sag es mir bitte.


2
postsstatt answersund httpstatt httpsspart man drei bytes (oder kann man das vielleicht http:ganz weglassen ?). (Ungetestet)
msh210

2
Sie können verwenden http://und es wird 301 noch https://besser umleiten , entfernen Sie einfach die http insgesamt//api.stackexchange.com...
Suever

8
jQuery ist keine Sprache und auch keine eingebaute Bibliothek in JS. Wenn Sie das verwenden, nehmen Sie auch die Byteanzahl von jQuery in Ihre Punktzahl auf.
Optimierer

10
@Optimizer: Dies ist die richtige Methode: Betrachten Sie JS + jQuery als seine eigene "Sprache". Siehe diesen Meta-Beitrag: meta.codegolf.stackexchange.com/a/9279/12914
El'endia Starman

3
Verwenden Sie $.getanstelle von $.getJSON. Der Inhaltstyp der API ist application/jsonund jQuery behandelt die Antwort automatisch als JSON.
Rob W

24

JavaScript ES6, 107 Bytes

fetch`//api.stackexchange.com/posts/82672?site=codegolf`.then(r=>r.json()).then(b=>alert(b.items[0].score))

Echte Programmierer nutzen das nicht XMLHttpRequest. Echte Programmierer verwenden die Fetch-API .


1
Nun ... du hast mich da. Ich wusste nie über diese API!
Conor O'Brien

Ich erhalte einen Fehler, der fetchnicht definiert ist
Anthony Pham

1
@PythonMaster Die Fetch-API ist noch nicht in allen Browsern verfügbar: caniuse.com/#feat=fetch
Jordan

21

Bash, 80 79 75 69 Bytes

w3m api.stackexchange.com/posts/82616?site=codegolf|tr ,: \\t|cut -f20

Für Bewertungszwecke \tsollte durch ein TAB-Zeichen ersetzt werden.

Dies erfordert w3m, die standardmäßig auf den meisten Linux-Distributionen verfügbar sein sollte.

Danke an @NoOneIsHere für -2 Bytes!

Wie es funktioniert

w3mist ein Befehlszeilen-Webbrowser. Es fragt die URL ab und zeigt ihren Inhalt (normalerweise) in einem lesbaren Format an. Hier haben wir nur (ab) verwenden es um den Anruf zu vermeiden, zcatdass curlerfordern würde, da SE die API - Antwort gzip-komprimierte dient.

tr ,: \^IErsetzt alle Kommas und Doppelpunkte durch Tabulatoren, die cutdas Standardfeldtrennzeichen darstellen.

Schließlich cut -f20entfernt alles außer dem zwanzigsten Feld, das die Stimmenzahl ist.


Oder --compressedwas ist noch länger als zcat.
Neil

9

JavaScript ES6, 175 165 160 145 Bytes

Dank Optimizer und Dendrobium viele Bytes gespart! Das sind alles Vielfache von fünf!

Verwenden von einfachem altem Javascript. Wer braucht diese neuen Bibliotheken? Echte Programmierer nutzenXMLHttpRequest()

with(new XMLHttpRequest)send(open("get","//api.stackexchange.com/posts/82614?site=codegolf"),onload=_=>alert(response.match(/re..([0-9]+)/)[1]))

Probieren Sie es aus

alert=x=>o.innerHTML=x;

with(new XMLHttpRequest)send(open("get","//api.stackexchange.com/posts/82614?site=codegolf"),onload=_=>alert(response.match(/re..([0-9]+)/)[1]))
*{font-family:Consolas,monospace;}
<div id=o></div>


@Optimizer Danke! Aber warum benutzen prompt?
Conor O'Brien

@Optimizer Funktioniert aus irgendeinem Grund "g"nicht als Option für mich.
Conor O'Brien

with(new XMLHttpRequest)(open("get","//api.stackexchange.com/2.2/posts/82614?site=codegolf"),onload=_=>alert(response.items[0].score),send(responseType="json"))für -5 Bytes
Dendrobium

@ Dendrobium Oh, schön. Ich habe vergessenwith
Conor O'Brien

@Optimizer bekomme ichTypeError: response.split(...)[12] is undefined",
Conor O'Brien

7

Bash + JQ , 69 Bytes

w3m api.stackexchange.com/posts/82615?site=codegolf|jq .items[].score

Ich habe curlund zcatvor; w3mist inspiriert von Dennis '(auffallend ähnlicher) Antwort. Es stellt sich heraus jqund tr/ oder cuthat die gleichen Bytekosten!


6

Konvex 0,5, 63 Bytes

0000000: 22 d1 2e 46 91 32 e5 69 5d b2 66 81 12 a4 8d d1  "..F.2.i].f.....
0000010: 27 40 b5 32 47 68 97 2c b9 5c 22 05 16 49 10 31  '@.2Gh.,.\"..I.1
0000020: 44 9e f3 0a 6a 16 b0 68 91 93 35 0b 96 dc 91 0a  D...j..h..5.....
0000030: 3c 18 80 22 dc 67 27 3c 2f 32 36 39 3d 37 3e     <..".g'</269=7>

Dadurch wird die Punktzahl von der Suchseite anstelle der API abgerufen, insbesondere von der Abfrage https://codegolf.stackexchange.com/search?q=inquestion:82714 . Zum Glück klappt das inquestionauch bei Antworten.

Nachprüfung

$ echo $LANG
en_US
$ cat gen.convex
"codegolf.stackexchange.com:80/search?q=inquestion:82714"Ö`"Üg'</269=7>"
$ java -jar Convex/out/builds/convex-0.5/convex/convex.jar gen.conv > count.conv
$ cksum count.conv
2414634109 63 count.conv
$ java -jar Convex/out/builds/convex-0.5/convex/convex.jar count.conv
1

Wie es funktioniert

"..."Ü           e# Use the built-in string compression to push
                 e# "codegolf.stackexchange.com:80/search?q=inquestion:82714".
      g          e# Retrieve the HTML page at that URL.
       '</       e# Split at occurrences of '<'.
          269=   e# Select the chunk at index 269.
                 e# This pushes "strong>", followed by the vote count.
              7> e# Discard the leading seven characters.

Das ist großartig. Woher wusstest du überhaupt, dass diese Sprache das kann?
Adnan

3
Es ist eine CJam-Gabel. Ich schrieb meine Antwort ursprünglich in CJam (67 Bytes), erinnerte mich dann aber daran, dass Convex eine eingebaute String-Komprimierung hat.
Dennis

5

05AB1E , 89 87 81 Bytes

Vielen Dank, Python ...

•1Ö8•D’£Ø ˆå§¾.‡¢ as g;#.¾¿„–(g.ˆåƒÛ('·Ç://ƒËŠˆ.‚‹º.ŒŒ/…é/ÿ/').‚Ø())’.er¡14èžz£þ

Verwendet die CP-1252- Codierung.


4

MATLAB, 103 Bytes

g=@getfield;g(g(webread('http://api.stackexchange.com/2.2/posts/82611?site=codegolf'),'items'),'score')

4

JavaScript (Node.js + Unirest ), 123 Byte

require("unirest").get("http://api.stackexchange.com/posts/82683?site=codegolf").end(x=>console.log(x.body.items[0].score))

Diese Bibliothek gefällt mir, weil sie JSON automatisch analysiert.


4

Julia, 128 107 Bytes

using Requests
f()=split(readall(get("http://api.stackexchange.com/posts/82621?site=codegolf")),r":|,")[20]

Dies ist eine Funktion, die keine Eingabe akzeptiert und die Punktzahl dieses Beitrags als Zeichenfolge zurückgibt. Das RequestsPaket muss installiert sein.

Wie es funktioniert:

  • get sendet eine GET-Anforderung an die SE-API
  • readall Liest die rohen Bytes in der Antwort und gibt eine Zeichenfolge zurück
  • split Teilt die Zeichenfolge in Doppelpunkte und Kommas
  • Das 20. Element des resultierenden Arrays ist die Punktzahl des Posts

21 Bytes gespart dank Dennis!


4

JavaScript (Node.js), 166 Bytes

-1 Byte, weil @ CᴏɴᴏʀO'Bʀɪᴇɴ mir das Zählen beigebracht hat;)

-4 Bytes dank @NoOneIsHere

require("http").get("http://api.stackexchange.com/posts/82620?site=codegolf",a=>a.on("data",d=>console.log(JSON.parse(require("zlib").gunzipSync(d)).items[0].score)))

Das ist etwas peinlich. Verdammt SE, dass du deine API gezippt hast! / s

Verbesserungen sind sehr willkommen.


3

PHP, 137 Bytes

Ziemlich einfach. Das Dekomprimieren benötigt viele Bytes:

<?=json_decode(gzinflate(substr(file_get_contents('http://api.stackexchange.com/2.2/posts/82619?site=codegolf'),10)),1)[items][0][score];

Ungolfed

print
  json_decode(
    gzinflate(
      substr(
        file_get_contents('http://api.stackexchange.com/2.2/posts/82619?site=codegolf'),
        10
      )
    ),
    1
  )
  [items][0][score];

2

PHP, 121 Bytes

Ohne api.

<?php preg_match('/t ">(.*)/',file_get_contents('http://codegolf.stackexchange.com/posts/82799/ajax-load'),$v);echo$v[1];

Ruft den gesamten Beitrag ab und extrahiert die Stimmenzahl mit Regex. (HTML nicht mit Regex parsen!)

Ungolfed:

<?php
   preg_match('/t ">(.*)/',
              file_get_contents('http://codegolf.stackexchange.com/posts/82799/ajax-load'),
              $v);

   echo $v[1];

Können Sie entfernen http:?
NoOneIsHere

@NoOne Nein, scheint dann nicht zu funktionieren.
Nicael

1

05AB1E , 45 Bytes

•2íЕ’¸¸.‚‹º.ŒŒ/„¤/ÿ?€¼=ƒËŠˆ’žYì.w'ŒÂ¡θ',¡нþ

Kein TIO für das gesamte Programm, da der .weingebaute Internetzugang bei TIO nicht funktioniert.

Erläuterung:

Wir beginnen damit, die URL zu erstellen und darauf zuzugreifen:

2íЕ       # Push compressed integer 190437 (the id of this answer)
  ’¸¸.‚‹º.ŒŒ/„¤/ÿ?€¼=ƒËŠˆ’
            # Push dictionary string "api.stackexchange.com/posts/ÿ?site=codegolf",
            # where the `ÿ` is automatically filled with the 190437
    žY      # Push builtin "https://"
      ì     # And prepend it in front of the string
.w          # Go to this website, and get all its contents

Probieren Sie es online (ohne die .w).

Danach extrahieren wir die Punktzahl aus dem JSON:

'ŒÂ        '# Push dictionary string "score"
   ¡        # Split the website content on this
    θ       # Only leave the last item (of the two)
     ',¡   '# Split this string on ","
        н   # And this time leave the first item (i.e. `":10`)
         þ  # Only leave the digits of this string
            # (which is output implicitly as result)

Probieren Sie es online aus.

Eine 10- Byte- Alternative für diesen zweiten Teil könnte sein:

„ŒÂ‚¡       # Push dictionary string "score after"
     #      # Split it on spaces: ["score","after"]
      ¡     # Split the website content on these
       Ås   # Only leave the middle element
         þ  # Only leave the digits of this string
            # (which is output implicitly as result)

Probieren Sie es online aus.

Sehen Sie diese 05AB1E Spitze von mir (Abschnitte Wie das Wörterbuch zu benutzen? Und Wie große natürliche Zahlen zu komprimieren? ) Zu verstehen , warum •2íЕist 190437, ’¸¸.‚‹º.ŒŒ/„¤/ÿ?€¼=ƒËŠˆ’ist "api.stackexchange.com/posts/ÿ?site=codegolf", 'ŒÂist "score", und „ŒÂ‚¡ist "score after".

PS / EDIT: Mir ist klar, dass ich durch die Verwendung von þniemals eine negative Bewertung erhalten werde. ;)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.