Pytanie:
Czy istnieje sposób na uzyskanie najnowszego pliku jar serwera za pośrednictwem adresu URL, który się nie zmienia?
Seriouslysean
2013-07-08 23:15:55 UTC
view on stackexchange narkive permalink

Piszę skrypt basha do zarządzania instalacją serwera waniliowego na moim eeePC. W tej chwili używam http://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar , aby uzyskać słoik minecraft_server. Wygląda na to, że jest dostępna tylko wersja serwerowa 1.5.2 zamiast wersji serwerowej 1.6.2.

Jakieś pomysły, jak mogę pobrać najnowszą stabilną wersję z podobnego adresu URL?

Mojang zmienia swoją infrastrukturę, aby umożliwić łatwy dostęp do wielu wersji w nowym programie uruchamiającym, więc wygląda na to, że ich schemat adresów URL zmienia się, aby to obsługiwać, pozostawiając nienaruszone adresy URL sprzed wersji 1.6. Być może trzeba będzie teraz przeanalizować URL śledzenia aktualizacji, aby znaleźć adres URL najnowszej stabilnej wersji. (Wszyscy po prostu uczeni zgadywania, aż wrócę do mojej instalacji i zobaczę, co robi nowy program uruchamiający, aby pobrać aktualizacje klienta i sprawdzić, czy to przekłada się na adresy URL jar serwera).
Dzięki za informację! Sam trochę grzebałem, ale nie mam jeszcze nic do pokazania. Dam ci znać, jeśli się czegoś dowiem.
Jedenaście odpowiedzi:
Richard Benson
2013-07-10 22:29:35 UTC
view on stackexchange narkive permalink

Pełne instrukcje

Niedawno zdekompilowałem program uruchamiający właśnie z tego powodu, aby zarządzać automatycznymi aktualizacjami opakowania mojego serwera za pomocą nowej konwencji nazewnictwa.

Znalazłem plik, którego używają do sprawdź, jaka jest aktualna wersja i jaki jest jej adres URL:

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

Ten plik zawiera następujące elementy (zgodnie z tą odpowiedzią):

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

Ten plik również zawiera tablicę "wersji". Przejdź przez to, aby znaleźć wersję, której szukasz w polu id . Zwykle jest to również pierwszy wpis w tej tablicy, więc możesz zaadresować go wersje [0] . Chwyć wartość url i pobierz plik, który zawiera następujący przydatny klucz:

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

Dlatego potrzebny adres URL znajduje się w downloads.server.url.

Summary


Nieaktualne instrukcje - tylko dla potomności

Które można następnie wykorzystać do ekstrapolacji najnowszej wersji do wydania i migawek przy użyciu tego schematu:

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

Korzystając z tej metody, nie musisz za każdym razem pobierać pliku jar / exe, tylko plik json, a następnie, jeśli zostanie zmieniony , możesz wziąć odpowiedni słoik.

+64 dla najlepszej możliwej odpowiedzi!
To jest dokładnie to, czego oczekiwałem. Dobra robota!
DOKŁADNIE to, czego szukałem, bardzo dziękuję!
BŁĄD 403: Zabroniony
AccessDeniedAccess DeniedBDFFB0CBC19A9EFDhTsBwKk0fJ + SFOQ6nqEVBqIMhOSQxttXnxfOOXnWtAPnbT9pgpgDWNHTVQeSt + 3xIqG6MeWbl0g = https://s3.amazonver.13.13load.1ecraft.13
@AaronFranke wygląda na to, że został niedawno zmieniony i jest nieco bardziej zaangażowany.Spróbuję poprawić odpowiedź.
Jason Cox
2013-07-11 08:37:48 UTC
view on stackexchange narkive permalink

Możesz użyć jsawk , aby pobrać najnowszy numer wersji jar z wersji JSON Minecrafta:

  #! / 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

Wymaga:

Do czego potrzebny jest SpiderMonkey?
jsawk używa SpiderMonkey (interpreter js) - tutaj więcej informacji: https://github.com/micha/jsawk
jsawk wygląda fajnie, gdzie mogę to dostać dla systemu Windows?
cptskyhawk
2013-11-05 05:18:42 UTC
view on stackexchange narkive permalink

Nawet rzucę kapelusz na ring! Bardzo podobny do powyższego, z kilkoma dodatkami.

  #! / Bin / bashtmpfile = / tmp / minecrafttempfile.tmpdownloadurl = "https://minecraft.net/download" serverurl = "" loc = $ ([[-n $ 1]] && echo $ 1 || echo "/tmp/minecraft_server.jar")if [[-a $ loc]]; następnie echo "$ loc istnieje - przechodzę do $ {loc} .old" mv $ loc $ {loc} .oldfiecho "Pobieranie strony pobierania Minecrafta ..." curl $ downloadurl > $ tmpfileecho "Pobieranie adresu URL pobierania dla serwera Minecraft .. . "serverurl =` egrep -io 'https. * wersje \ / (. *) \ / minecraft_server. \ 1.jar' $ tmpfile`echo "URL =" $ serverurlecho "Pobieranie pliku jar serwera ..." wget -q - O $ loc $ serverurl  

https://github.com/cptskyhawk/LinuxMinecraftTools

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

Mam konfigurację serwera, która aktualizuje się co noc poleceniem webget.exe wcześniej. Ta zmiana spowodowała, że ​​stworzyłem program, który pobiera stronę pobierania po pliku * server.exe i pobiera ją jako minecraft_server.exe.

Zmodyfikowałem go, aby przyjmował parametr „jar”, ​​dzięki czemu otrzymuje * server.jar i pobiera go jako minecraft_server.jar.

Spakowany exe jest tutaj: http://halsvik.net/downloads/GetLatestMinecraftServer.zip

Jeśli pobierzesz program, uruchom go bez żadnych parametrów: GetLatestMinecraftServer.exe

Jeśli chcesz zamiast tego plik serwera jar, użyj: GetLatestMinecraftServer.exe jar

Kod źródłowy jest następujący:

  static void Main (string [] args) {try {var ext = ".exe"; if (args.Length > 0) {ext = "." + argumenty [0]; } var wc = new System.Net.WebClient (); var url = "http://minecraft.net/download"; var data = wc.DownloadData (url); var page = Encoding.UTF8.GetString (dane); var links = RóżneGetStringsBetween (strona, "<a href = \" "," \ ""); // Niestandardowa metoda pobierania dopasowań bool match = false; foreach (element var w linkach) {if (item.ToLower (). Contains ("server") && item.ToLower (). Contains (ext)) {var filename = "minecraft_server" + ext; var fn = Path.GetFullPath (nazwa pliku); while (File.Exists (nazwa pliku + „.old”)) File.Delete (nazwa pliku + „.old”); if (File.Exists (fn)) File.Move (fn, fn + ".old"); spróbuj {var comp = false; wc.DownloadProgressChanged + = (o, e) = > {Console.Write ("#"); // Wskaż, że coś jest pobierane};
wc.DownloadFileCompleted + = (o, e) = > {comp = true; }; wc.DownloadFileAsync (nowy Uri (element), nazwa pliku); // Poczekaj na zakończenie pobierania while (! Comp) {Console.Write ("."); // Wskaż, że trwa czas Thread.Sleep (1000); }} catch (Exception ex) {Console.WriteLine ("Pobieranie" + item + "failed." + ex.Message); powrót; } Console.WriteLine ("Pobierz OK"); match = true; złamać; }} if (! match) {Console.WriteLine ("Nie można znaleźć serwera Minecraft na http://minecraft.net/download"); }} catch (Exception ex) {Console.WriteLine ("Coś się nie udało." + ex.ToString ()); }}  
Niestety, mój serwer działa na Linux-ie, ale zdecydowałem się podejść do tego z podobnym rozwiązaniem. Dziękuję bardzo za poświęcenie czasu na napisanie tego!
Spongman
2013-08-20 09:40:17 UTC
view on stackexchange narkive permalink

oto moja okropna wersja seda.

mniej poprawna niż wersja Jasona powyżej. ale mniej zależności.

  #! / bin / bashwget -qN https://launchermeta.mojang.com/mc/game/version_manifest.jsonMCVER=`sed -n -e '/ \ " najnowsza \ "/, /} / s /.* \" migawka \ ": \" \ ([^ \ "] * \) \". * / \ 1 / p '< version_manifest.json`wget -N https: //s3.amazonaws.com/Minecraft.Download/versions/$MCVER/minecraft_server.$MCVER.jar  
To jest typ scenariusza, który napisałem! Dziękuję za poświęcenie czasu na dodanie tego do mojego pytania, jest naprawdę przydatne.
Zuntaruk
2017-12-25 10:16:47 UTC
view on stackexchange narkive permalink

Dla tych, którzy to patrzą, znalazłem również sposób, aby użyć grep zamiast seda, aby wyciągnąć wersję, używając następującego:

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

Plik pochodzi z powyższych przykładów.

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

Osobiście uważam, że użycie powyższego polecenia grep jest odrobinę czystsze.

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

Poniższy skrypt bash używa curl jq & do:

  • pobierz plik wersji manifestu
  • wyodrębnij adres URL najnowszego manifestu
  • pobierz najnowszy manifest
  • wyodrębnij adres URL pliku jar serwera
  • pobierz plik server.jar do minecraft_server.$version.jar
  • dowiązanie symboliczne server.jar do minecraft_server.$version.jar

Użyj go w połączeniu ze skryptem startowym Minecrafta, który używa linku symbolicznego server.jar .

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

deklaruj -r version_manifest_url = "\
https://launchermeta.mojang.com/mc/game/version_manifest.json ”
deklaruj -r tmp = "/ tmp / version_manifest.json"

# Znajdź adres URL pobierania najnowszej wersji.
najnowsza_wersja = $ (curl -Ss -o "$ tmp" "$ version_manifest_url" \
    && jq .latest.release -r "$ tmp")
latest_manifest_url = $ (cat "$ tmp" | jq -r ".versions [] \
    | select (zawiera ({type: \ "release \", id: \ "$ latest_version \"})) \
    | .url ”)

# Pobierz najnowszą wersję tylko wtedy, gdy nazwa pliku docelowego nie istnieje.
deklaruj -r manifest = "/ tmp / manifest. $ latest_version.json"
curl -Ss -o "$ manifest" "$ latest_manifest_url"

deklaruj -r jar_url = $ (jq -r ".downloads.server.url" "$ manifest")

echo "najnowsza wersja: $ latest_version"
echo "adres URL manifestu: $ latest_manifest_url"
echo "pobierz url: $ jar_url"

deklaruj -r jar = "serwer_minecraft. $ najnowsza_wersja.jar"
curl -Ss -o "$ jar" "$ jar_url"

# Symbolicznie link server.jar do najnowszej wersji.
deklaruj -r symlink = "server.jar"
rm -f "$ link symboliczny"
ln -s "$ jar" "$ łącze symboliczne"

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

To moja próba

  #! / bin / bash

# Wyczyść stare pliki

rm / minecraft / temp / *

# Pobierz plik version_manifest z Mojang

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

# Przeanalizuj pliki version i version.json na zmienne

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

# Pobierz plik json specyficzny dla wersji do przeanalizowania

wget -P / minecraft / temp "$ URL"

# Dodaj .json na końcu wersji, która ma być używana do analizowania pliku JSON

VER2 = "$ VER.json"

#Parse plik version.json, aby uzyskać adres URL pobierania serwera

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

# Pobierz plik server.jar

wget -P / minecraft / temp $ SERVERURL

# Utwórz kopię zapasową starego pliku minecraft_server.jar

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

# Przenieś pobrany plik serwera do pliku minecraft_server.jar w katalogu minecraft

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

echo „Minecraft uaktualniony do wersji $ VER”
 
Vincent Le Dû
2020-03-03 16:15:41 UTC
view on stackexchange narkive permalink

Moje 50ct do tego starego wątku. Mój cel:

  • unikaj zależności
  • nie komplikuj

Moje 3 wiersze do pobrania najnowszej migawki:

  #! / 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 ["wersje"] [0] ["url"] ')

MC_LATEST_SNAPSHOT = $ (curl -s $ MC_VERSION_URLS | python -c 'import json, sys, base64; obj = json.load (sys.stdin); print ["pliki do pobrania"] ["serwer"] ["url"]')

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

To działa dla podłoża, zmodyfikuj dla Java Ed:

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

echo $ url
 

Spowoduje to wyświetlenie adresu URL w najnowszej wersji.

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

Otrzymałem genialną odpowiedź od Richarda Bensona i oszalałem. https://github.com/sc-perth/BashScripts/blob/master/minecraft_updater.sh Przetestowano pracę na mojej instancji DigitalOcean Ubuntu 16.04.Dzięki Richard!

Skrypt domyślnie sprawdzi, czy korzystasz z najnowszej wersji, i poinformuje Cię o tym.Pobierze go również, jeśli podasz argument -d | --download.Zainstaluje również aktualizację, jeśli zmodyfikujesz skrypt, aby pasował do twojego środowiska & włącz tę funkcję.To samo zrobi dla każdej określonej wersji, po sprawdzeniu wersji.Nie działa dla migawek, tylko dla wydań.

ZALEŻNOŚCI:

jq, wget Te mogą wymagać zainstalowania, resztę prawdopodobnie masz.

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



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...