Compteur de votes d'échange de pile


40

Ecrivez un programme / une fonction qui renvoie le nombre de votes de sa propre réponse Stack Exchange au moment de son exécution.

  • Votre programme / fonction peut accéder à cette page ( codegolf.stackexchange.com/questions/82609 ) via Internet, toutefois:
  • Votre programme / fonction ne peut accepter aucune entrée d’utilisateur et
  • L'utilisation de raccourcisseurs d'URL n'est pas autorisée
  • Votre programme / fonction peut utiliser uniquement sa propre source comme point de référence pour le décompte des votes (par exemple: aucune chaîne de texte de référence dans la réponse qu'il contient, mais pas dans sa propre source).
  • Votre programme / fonction doit générer son propre décompte de votes et uniquement son propre décompte de votes (par exemple, aucun nombre de votes ne sera renvoyé sur cette page).

C'est le code-golf, le code le plus court gagne.


perl -e'($_)=`curl -s http://api.stackexchange.com/2.2/posts/123?site=codegolf`;/score":(\d+)/&&print$1'on dirait que ça devrait marcher, mais ça ne marche pas. Mais peut-être que quelqu'un peut l'utiliser.
msh210

7
Pour tous ceux qui essaient d'utiliser l'API et qui échouent: Il sert la réponse encodée en gzip, même si le client ne la prend pas en charge.
Dennis

13
"Votre programme / fonction peut utiliser uniquement sa propre source comme point de référence pour le décompte des votes" Cela prête à confusion. Cela signifie-t-il que les réponses doivent essayer de s'identifier uniquement à l'aide de la connaissance de leur propre code, et non par quelque chose comme un post-id? Je ne pense pas qu'une telle règle serait bonne, car elle peut être enfreinte par toute autre personne affichant une nouvelle réponse.
FryAmTheEggman

@FryAmTheEggman J'ai réfléchi un peu aux réponses des autres peuples, et j'ai même envisagé d'en faire un KOTH où votre source essaie de saper une autre réponse, bien qu'à la fin cela ait semblé pousser le format plus que je ne le voulais ... J'ai ajouté le using its own sourcebit pour empêcher les utilisateurs de configurer la page afin de se retrouver plus facilement sans contribuer à son nombre d'octets, dans le cas où la réponse n'utilise pas la méthode post id.
Dendrobium

2
Bon, le libellé est un peu bizarre. Je recommanderais plutôt d'interdire directement l'utilisation de services Web autres que ceux fournis par stackexchange (sauf si je vous ai mal compris), au lieu d'autoriser certains comportements de cette manière. En remarque, en raison de la nature du problème d’intégralité, il est impossible de réaliser quelque chose comme cela, incassable. Le mieux que vous puissiez faire est de le rendre invraisemblable.
FryAmTheEggman

Réponses:


39

jQuery + JavaScript, 85 octets

$.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>

Histoire

  • -6 octets parce que j'utilisais la var dataau lieu de d.
  • -3 octets grâce à @ msh210
  • -13 octets grâce à @ CᴏɴᴏʀO'Bʀɪᴇɴ
  • -4 octets grâce à @ user6188402
  • -5 octets grâce à @Suever
  • -4 octets grâce à @RobW

Utilisation recommandée

  • Exécuter extrait.
  • Upvote.
  • Lancez Snippet et soyez émerveillé lorsque le nombre augmente comme par magie.

Prime!!

Qui n'aime pas les bonus?

$.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>

Entrez l'ID dans le bonus et il vous dira le score.

Encore plus de bonus !! Exécutez cet extrait pour exécuter automatiquement le programme, le vote positif, puis à nouveau! (Requiert rep> 15, auth). Si cela ne fonctionne pas, dites-le moi.


2
postsau lieu de answerset httpau lieu de httpsenregistre trois octets (ou peut-être pouvez-vous http:tout omettre ?). (Non testé.)
msh210

2
Vous pouvez utiliser http://et il va rediriger vers https://Mieux encore, il suffit de supprimer le http//api.stackexchange.com...
Suever

8
jQuery n'est pas un langage, pas plus qu'une bibliothèque intégrée à JS. Donc, si vous utilisez cela, incluez également le nombre d'octets de jQuery dans votre score.
Optimiseur

10
@Optimizer: C’est la bonne façon de procéder: considérez JS + jQuery comme étant son propre "langage". Voir cette publication meta: meta.codegolf.stackexchange.com/a/9279/12914
El'endia Starman

3
Utilisez $.getau lieu de $.getJSON. Le type de contenu de l'API est application/json, et jQuery traitera automatiquement la réponse en tant que JSON.
Rob W

24

JavaScript ES6, 107 octets

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

Les vrais programmeurs n'utilisent pas XMLHttpRequest. Les vrais programmeurs utilisent l' API Fetch .


1
Eh bien ... tu m'as là-bas. Je n'ai jamais su à propos de cette API!
Conor O'Brien

Je reçois une erreur qui fetchn'est pas définie
Anthony Pham

1
@PythonMaster L'API Fetch n'est pas encore disponible sur tous les navigateurs: caniuse.com/#feat=fetch
Jordanie

21

Bash, 80 79 75 69 octets

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

À des fins de notation, \tdoit être remplacé par un caractère de tabulation.

Cela nécessite w3m, qui devrait être disponible par défaut sur la plupart des distributions Linux.

Merci à @NoOneIsHere pour -2 octets!

Comment ça marche

w3mest un navigateur Web en ligne de commande. Il interroge l'URL et affiche (normalement) son contenu dans un format lisible. Ici, nous l’utilisons (ab) pour éviter l’appel zcatque curlcela exigerait, car SE sert la réponse de l’API gzip-compressée.

tr ,: \^Iremplace toutes les virgules et les deux points par des tabulations, qui sont cutle délimiteur de champ par défaut.

Enfin, cut -f20supprime tout sauf le vingtième champ, qui est le décompte des voix.


Ou --compressed, qui est encore plus long que zcat.
Neil

9

JavaScript ES6, 175 165 160 145 octets

Des lots sauvés grâce à Optimizer et Dendrobium! Ils sont tous des multiples de cinq!

Utiliser plain javascript. Qui a besoin de ces nouvelles bibliothèques? Les vrais programmeurs utilisentXMLHttpRequest()

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

Testez le

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 Merci! Mais pourquoi utiliser prompt?
Conor O'Brien

@Optimizer Pour une raison quelconque, "g"cela ne fonctionne pas comme une option pour moi.
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"))pour -5 octets
Dendrobium

@Dendrobium Oh, gentil. J'ai oublié à propos dewith
Conor O'Brien

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

7

bash + jq , 69 octets

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

J'ai utilisé curlet zcatavant; w3mest inspiré par la réponse de Dennis (étonnamment similaire). Il s'avère jqet tr/ cutont le même coût en octets!


6

Convexe 0,5, 63 octets

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>

Cela récupère le score de la page de recherche à la place de l'API, plus précisément de la requête https://codegolf.stackexchange.com/search?q=inquestion:82714 . Heureusement, inquestionfonctionne également pour les réponses.

Vérification

$ 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

Comment ça marche

"..."Ü           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.

Ceci est incroyable. Comment avez-vous même su que cette langue peut faire cela?
Adnan

3
C'est une fourchette de CJam. A l'origine, j'avais écrit ma réponse en CJam (67 octets), mais je me suis ensuite rappelé que Convex possède une compression de chaîne intégrée.
Dennis

5

05AB1E , 89 87 81 octets

Merci Python ...

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

Utilise le codage CP-1252 .


4

MATLAB, 103 octets

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

4

JavaScript (Node.js + Unirest ), 123 octets

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

J'aime cette bibliothèque, car elle analyse automatiquement JSON.


4

Julia, 128 107 octets

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

C'est une fonction qui ne prend aucune entrée et retourne le score de cet article sous forme de chaîne. Il nécessite laRequests paquet doit être installé.

Comment ça marche:

  • get fait une requête GET à l'API SE
  • readall lit les octets bruts de la réponse et retourne une chaîne
  • split divise la chaîne entre deux points et des virgules
  • Le 20ème élément du tableau résultant est le score du message

Sauvé 21 octets grâce à Dennis!


4

JavaScript (Node.js), 166 octets

-1 octet parce que @ CᴏɴᴏʀO'Bʀɪᴇɴ m'a appris à compter;)

-4 octets grâce à @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)))

C'est un peu gênant. Dang vous SE pour gzipping votre API! / s

Toutes les améliorations sont les bienvenues.


3

PHP, 137 octets

Assez simple. La décompression prend beaucoup d'octets:

<?=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 octets

Sans api.

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

Obtient l'intégralité du post et extrait les votes avec regex. (ne pas analyser HTML avec regex!)

Ungolfed:

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

   echo $v[1];

Pouvez-vous enlever http:?
NoOneIsHere

@NoOne Non, ne semble pas fonctionner alors.
nicael

1

05AB1E , 45 octets

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

Pas de TIO pour l'ensemble du programme, car l' .waccès à Internet intégré ne fonctionne pas sur TIO.

Explication:

Nous commençons par créer l'URL et y accéder:

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

Essayez-le en ligne (sans le .w).

Après cela, nous extrayons le score du 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)

Essayez-le en ligne.

Une alternative égale à 10 octets pour cette seconde partie pourrait être:

„ŒÂ‚¡       # 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)

Essayez-le en ligne.

Voir cette astuce 05AB1E de mes (sections Comment utiliser le dictionnaire? Et Comment compresser les grands entiers? ) Pour comprendre pourquoi •2íЕest 190437, ’¸¸.‚‹º.ŒŒ/„¤/ÿ?€¼=ƒËŠˆ’est "api.stackexchange.com/posts/ÿ?site=codegolf",'ŒÂ est "score"et „ŒÂ‚¡est"score after" .

PS / EDIT: Je me rends compte qu'en utilisant le, þje suppose que je n'aurai jamais un score négatif. ;)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.