Question:
Existe-t-il un moyen d'obtenir le dernier fichier jar du serveur via une URL qui ne change pas?
Seriouslysean
2013-07-08 23:15:55 UTC
view on stackexchange narkive permalink

J'écris un script bash pour gérer une installation de serveur vanilla sur mon eeePC. En ce moment, j'utilise http://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar pour obtenir le bocal minecraft_server. Il semble n'obtenir que la version serveur 1.5.2 au lieu de la version serveur 1.6.2.

Des idées sur la façon dont je peux récupérer la dernière version stable via une URL similaire?

Mojang modifie son infrastructure pour permettre à plusieurs versions d'être facilement accessibles dans le nouveau lanceur, il semble donc que leur schéma d'URL change pour prendre en charge cela tout en laissant intactes les URL antérieures à 1.6. Vous devrez peut-être analyser une URL de suivi des mises à jour maintenant pour trouver la dernière URL de version stable. (Tout ce que je fais pour deviner jusqu'à ce que je puisse revenir à mon installation et regarder ce que le nouveau lanceur fait pour extraire les mises à jour du client et voir si cela se traduit par des URL de serveur jar.)
Merci pour l'info! J'en ai fait quelques recherches par moi-même, mais rien pour le moment. Je vous ferai savoir si je découvre quelque chose.
Onze réponses:
Richard Benson
2013-07-10 22:29:35 UTC
view on stackexchange narkive permalink

Instructions complètes

J'ai récemment décompilé le lanceur pour cette raison, pour gérer les mises à jour automatiques de mon wrapper de serveur avec leur nouvelle convention de dénomination.

J'ai trouvé le fichier qu'ils utilisent pour déterminer la version actuelle et l'URL de celle-ci:

https://launchermeta.mojang.com/mc/game/version_manifest.json

Ce fichier comprend les éléments suivants (à partir de cette réponse):

  "latest": {"snapshot": "1.9-pre3", "release": "1.8.9"}, " versions ": [{" id ":" 1.13.1 "," type ":" release "," url ":" https://launchermeta.mojang.com/v1/packages/c0f1e6239a16681ffbfa68fc469038643304d5a9/1.13.1.json " , "time": "2018-08-30T09: 49: 34 + 00: 00", "releaseTime": "2018-08-22T14: 03: 42 + 00: 00"}, ...]  

Ce fichier a également un tableau "versions". Parcourez ceci pour trouver la version que vous recherchez dans le champ id . C'est aussi généralement la première entrée de ce tableau, vous pouvez donc l'adresser versions [0] . Saisissez la valeur url et récupérez ce fichier qui contient la clé utile suivante:

  "downloads": {"client": {"sha1": "8de235e5ec3a7fce168056ea395d21cbdec18d7c", "size": 16088559, "url": "https://launcher.mojang.com/v1/objects/8de235e5ec3a7fce168056ea395d21cbdec18d7c/client.jar"}, "server": {"sha1": "fe123682e9cb30031eae00" size351764f " 33832589, "url": "https://launcher.mojang.com/v1/objects/fe123682e9cb30031eae351764f653500b7396c9/server.jar"}},  

Par conséquent, l'URL dont vous avez besoin est contenue dans downloads.server.url.

Summary


Instructions obsolètes - pour la postérité uniquement

Ce que vous pouvez ensuite utiliser pour extrapoler la dernière version pour la publication et les instantanés en utilisant ce schéma:

  https://s3.amazonaws.com/Minecraft.Download/versions/ "+ Ver + "/ minecraft_server." + Ver + ".jar  

En utilisant cette méthode, vous n'avez pas besoin de télécharger le fichier jar / exe à chaque fois, juste le fichier json et ensuite s'il est modifié , vous pouvez saisir le pot approprié.

+64 pour la meilleure réponse possible!
C'est exactement le genre de chose que je m'attendais à exister. Bon travail!
EXACTEMENT ce que je cherchais, merci beaucoup!
ERREUR 403: interdit
AccèsDeniedAccess RefuséBDFFB0CBC19A9EFDhTsBwKk0fJ + SFOQ6nqEVBqIMhOSQxttXnxfOOXnWtAPnbT9pgpgDWNHTVQeSt + 3xIqGecraftMeWbl0g0fJ + SFOQ6nqEVBqIMhOSQxttXnxfOOXnWtAPnbT9pgpgDWNHTVQeSt + 3xIqGecraftMeWbl0g0g = https://s3.amazon.1aws.1aws.1
@AaronFranke semble avoir changé récemment et est un peu plus impliqué.Je vais essayer de modifier la réponse.
Jason Cox
2013-07-11 08:37:48 UTC
view on stackexchange narkive permalink

Vous pouvez utiliser jsawk pour extraire le dernier numéro de version de jar de la version JSON de Minecraft:

  #! / bin / bashVER = `curl -s https: //launchermeta.mojang.com/mc/game/version_manifest.json | jsawk -n 'out (this.latest.release)' `` wget https://s3.amazonaws.com/Minecraft.Download/versions/$VER/minecraft_server.$VER.jar

Nécessite:

À quoi sert SpiderMonkey?
jsawk utilise SpiderMonkey (interprète js) - voici plus d'informations: https://github.com/micha/jsawk
jsawk a l'air cool, où puis-je obtenir cela pour Windows?
cptskyhawk
2013-11-05 05:18:42 UTC
view on stackexchange narkive permalink

Je vais même jeter mon chapeau dans le ring! Très similaire à ci-dessus, avec quelques extras.

  #! / Bin / bashtmpfile = / tmp / minecrafttempfile.tmpdownloadurl = "https://minecraft.net/download" serverurl = "" loc = $ ([[-n $ 1]] && echo $ 1 || echo "/tmp/minecraft_server.jar")if [[-a $ loc]]; then echo "$ loc existe - déplacement vers $ {loc} .old" mv $ loc $ {loc} .oldfiecho "Récupération de la page de téléchargement de minecraft ..." curl $ downloadurl > $ tmpfileecho "Obtention de l'URL de téléchargement pour le serveur minecraft .. . "serverurl =` egrep -io 'https. * versions \ / (. *) \ / minecraft_server. \ 1.jar' $ tmpfile`echo "URL =" $ serverurlecho "Téléchargement du fichier jar du serveur ..." wget -q - O $ loc $ serverurl  

https://github.com/cptskyhawk/LinuxMinecraftTools

Wolf5
2013-07-10 03:58:48 UTC
view on stackexchange narkive permalink

J'ai une configuration de serveur qui se met à jour chaque nuit avec une commande webget.exe plus tôt. Le changement m'a amené à créer un programme qui gratte la page de téléchargement après un * server.exe et le télécharge en tant que minecraft_server.exe.

Je l'ai modifié pour prendre un paramètre "jar" afin qu'il obtienne * server.jar à la place et le télécharge en tant que minecraft_server.jar.

L'exe compressé est ici: http://halsvik.net/downloads/GetLatestMinecraftServer.zip

Si vous téléchargez le programme, exécutez-le sans aucun paramètre: GetLatestMinecraftServer.exe

Si vous voulez le fichier de serveur jar à la place, utilisez: GetLatestMinecraftServer.exe jar

Le code source est le suivant:

  static void Main (string [] args) {try {var ext = ".exe"; if (args.Length > 0) {ext = "." + args [0]; } var wc = nouveau System.Net.WebClient (); var url = "http://minecraft.net/download"; var data = wc.DownloadData (url); var page = Encoding.UTF8.GetString (données); var links = Misc.GetStringsBetween (page, "<a href = \" "," \ ""); // Méthode personnalisée pour obtenir des correspondances bool match = false; foreach (élément var dans les liens) {if (élément.ToLower (). Contient ("serveur") && item.ToLower (). Contient (ext)) {var filename = "serveur_minecraft" + ext; var fn = Path.GetFullPath (nom de fichier); while (File.Exists (filename + ".old")) File.Delete (filename + ".old"); if (File.Exists (fn)) File.Move (fn, fn + ".old"); essayez {var comp = false; wc.DownloadProgressChanged + = (o, e) = > {Console.Write ("#"); // Indique que quelque chose est en cours de téléchargement};
wc.DownloadFileCompleted + = (o, e) = > {comp = true; }; wc.DownloadFileAsync (nouvel Uri (élément), nom de fichier); // Attend la fin du téléchargement while (! Comp) {Console.Write ("."); // Indique que le temps passe Thread.Sleep (1000); }} catch (Exception ex) {Console.WriteLine ("Téléchargement de" + élément + "a échoué." + ex.Message); revenir; } Console.WriteLine ("Télécharger OK"); match = vrai; Pause; }} if (! match) {Console.WriteLine ("Impossible de trouver le serveur minecraft sur http://minecraft.net/download"); }} catch (Exception ex) {Console.WriteLine ("Quelque chose a échoué." + ex.ToString ()); }}  
Malheureusement, j'exécute mon serveur sur une machine Linux, mais j'ai décidé de l'aborder avec une solution similaire. Merci beaucoup d'avoir pris le temps d'écrire ceci!
Spongman
2013-08-20 09:40:17 UTC
view on stackexchange narkive permalink

voici mon horrible version sed.

moins correcte que la version de Jason, ci-dessus. mais moins de dépendances.

  #! / bin / bashwget -qN https://launchermeta.mojang.com/mc/game/version_manifest.jsonMCVER=`sed -n -e '/ \ " dernier \ "/, /} / s /.* \" snapshot \ ": \" \ ([^ \ "] * \) \". * / \ 1 / p '< version_manifest.json`wget -N https: //s3.amazonaws.com/Minecraft.Download/versions/$MCVER/minecraft_server.$MCVER.jar  
C'est le type de script que j'ai fini par écrire! Merci d'avoir pris le temps d'ajouter ceci à ma question, c'est vraiment utile.
Zuntaruk
2017-12-25 10:16:47 UTC
view on stackexchange narkive permalink

Pour ceux qui regardent cela, j'ai également trouvé un moyen d'utiliser grep au lieu de sed pour extraire la version en utilisant ce qui suit:

grep -oP "\" release \ ": \" \ K \ d {1,2} \. \ d {1,2} \. \ d {1,2} "version_manifest.json

Le fichier est extrait des exemples ci-dessus.

https://launchermeta.mojang.com/mc/game/version_manifest.json

Personnellement, j'ai trouvé l'utilisation de la commande grep ci-dessus un peu plus propre.

jones77
2020-01-19 01:32:08 UTC
view on stackexchange narkive permalink

Le script bash suivant utilise jq & curl pour:

  • télécharger le fichier des versions du manifeste
  • extraire l'url du dernier manifeste
  • télécharger le dernier manifeste
  • extraire l'url du fichier jar du serveur
  • téléchargez le server.jar sur minecraft_server.$version.jar
  • liez symboliquement server.jar à minecraft_server.$version.jar

Utilisez-le en combinaison avec un script de démarrage minecraft qui utilise le lien symbolique server.jar .

  #! / usr / bin / env bash
#
set -o errexit

déclarer -r version_manifest_url = "\
https://launchermeta.mojang.com/mc/game/version_manifest.json "
déclarer -r tmp = "/ tmp / version_manifest.json"

# Trouver l'URL de téléchargement de la dernière version.
dernière_version = $ (curl -Ss -o "$ tmp" "$ version_manifest_url" \
    && jq .latest.release -r "$ tmp")
last_manifest_url = $ (cat "$ tmp" | jq -r ".versions [] \
    | select (contient ({type: \ "release \", id: \ "$ latest_version \"})) \
    | .url ")

# Ne téléchargez la dernière version que si le nom de fichier cible n'existe pas.
declare -r manifest = "/ tmp / manifest. $ latest_version.json"
curl -Ss -o "$ manifest" "$ latest_manifest_url"

déclarer -r jar_url = $ (jq -r ".downloads.server.url" "$ manifest")

echo "dernière version: $ latest_version"
echo "URL du manifeste: $ latest_manifest_url"
echo "URL de téléchargement: $ jar_url"

déclarer -r jar = "serveur_minecraft. $ dernière_version.jar"
curl -Ss -o "$ jar" "$ jar_url"

# Lien symboliquement server.jar vers la dernière version.
déclarer -r symlink = "serveur.jar"
rm -f "$ lien symbolique"
ln -s "$ jar" "$ symlink"

 
Louhbo
2019-04-24 23:39:02 UTC
view on stackexchange narkive permalink

C'est ma tentative.

  #! / bin / bash

#Nettoyez les anciens fichiers

rm / minecraft / temp / *

# Récupérez le fichier version_manifest de Mojang

wget -P / minecraft / temp https://launchermeta.mojang.com/mc/game/version_manifest.json

#Parse les fichiers version et version.json en variables

URL = $ (jq -r '.versions [0] .url' /minecraft/temp/version_manifest.json)
VER = $ (jq -r '.versions [0] .id' /minecraft/temp/version_manifest.json)

#Obtenir le fichier json spécifique à la version à analyser

wget -P / minecraft / temp "$ URL"

#Add .json à la fin de la version à utiliser pour analyser le fichier json

VER2 = "$ VER.json"

#Parse le fichier version.json pour obtenir l'URL de téléchargement du serveur

SERVERURL = $ (jq -r '.downloads.server.url' / minecraft / temp / $ VER2)

#Téléchargez le fichier server.jar

wget -P / minecraft / temp $ SERVERURL

#Sauvegardez l'ancien fichier minecraft_server.jar

mv /minecraft/minecraft_server.jar /minecraft/minecraft_server.jar.old

# Déplacez le fichier serveur téléchargé vers le fichier minecraft_server.jar dans le répertoire minecraft

mv /minecraft/temp/server.jar /minecraft/minecraft_server.jar

echo "Minecraft mis à niveau vers la version $ VER"
 
Vincent Le Dû
2020-03-03 16:15:41 UTC
view on stackexchange narkive permalink

Mon 50ct à ce vieux fil. Mon objectif:

  • éviter les dépendances
  • Restez simple

Mes 3 lignes pour télécharger le dernier instantané:

  #! / bin / bash
MC_VERSION_URLS = $ (curl -s https://launchermeta.mojang.com/mc/game/version_manifest.json | python -c 'import json, sys, base64; obj = json.load (sys.stdin); print obj ["versions"] [0] ["url"] ')

MC_LATEST_SNAPSHOT = $ (curl -s $ MC_VERSION_URLS | python -c 'import json, sys, base64; obj = json.load (sys.stdin); print obj ["téléchargements"] ["serveur"] ["url"]')

wget $ MC_LATEST_SNAPSHOT
 
Michael Reilly
2020-03-27 22:23:49 UTC
view on stackexchange narkive permalink

Cela fonctionne pour le substrat, modifier pour Java Ed:

  url = $ (curl https://www.minecraft.net/en-us/download/server/bedrock/ | grep "linux / bedrock-server-" | egrep -o 'https?: // [^ "] + ')

echo $ url
 

Il affichera l'URL vers la dernière version.

Perth
2017-02-28 09:14:55 UTC
view on stackexchange narkive permalink

A pris la brillante réponse de Richard Benson et s'est déchaîné. https://github.com/sc-perth/BashScripts/blob/master/minecraft_updater.sh Testé sur mon instance DigitalOcean Ubuntu 16.04.Merci Richard!

Script vérifiera par défaut si vous utilisez la dernière version et vous en informera.Il le téléchargera également si vous spécifiez l'argument -d | --download.Il installera également la mise à jour, si vous modifiez le script pour l'adapter à votre environnement & activer cette fonctionnalité.Il fera également la même chose pour toute version que vous spécifiez, après validation de la version.Ne fonctionne pas pour les instantanés, uniquement pour les versions.

DÉPENDANCES:

jq, wget Ceux-ci devront peut-être être installés, le reste que vous avez probablement.

bash, (e) grep, basename, dirname, chown, chmod, tar w / gzip, find, printf



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...