Поиск веб-сайта Unity3D возвращает ноль в Unity3D 4.7.2 - PullRequest
0 голосов
/ 18 мая 2018

Вот мой код.

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://itunes.apple.com/lookup?id=1218822890");
        request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

        using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            using(Stream stream = response.GetResponseStream())
                using(StreamReader reader = new StreamReader(stream))
        {
            string textRead = reader.ReadToEnd();

            Debug.Log("\nData Read = "); Debug.Log(textRead);
        }

Я пытался прочитать ссылку на сайт игры из кода единства и прочитать цену приложения.Возвращает ноль ... что не так с call?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Ваш код в порядке и работает правильно.Он не возвращает ноль. Вы думаете, что он возвращает ноль, потому что данные, которые вы получаете, содержат \n\n, поэтому json должен начинаться несколькими строками ниже.Чтобы увидеть данные, вам нужно немного прокрутить вкладку «Консоль» или изменить размер горизонтальной линии в кружке ниже.

enter image description here

Хотя в Unity лучше использовать UnityWebRequest, но HttpWebRequest также должно работать.Чтобы ответить на ваш другой вопрос, как только вы загрузите данные, используйте JsonUtility.FromJson для десериализации их в объект, после чего вы сможете получить доступ к цене.

Вот как должна выглядеть эта функциякак в C #:

void Start()
{
    StartCoroutine(CheckForPaidApp("http://itunes.apple.com/lookup?id=1218822890")); ;
}


IEnumerator CheckForPaidApp(string uri)
{
    UnityWebRequest uwr = UnityWebRequest.Get(uri);
    yield return uwr.SendWebRequest();

    if (uwr.isHttpError || uwr.isNetworkError)
    {
        Debug.Log("Error While Sending: " + uwr.error);
    }
    else
    {
        string data = uwr.downloadHandler.text;
        Debug.Log("Received: " + uwr.downloadHandler.text);

        //Serialize to Json
        RootObject jsonObj = JsonUtility.FromJson<RootObject>(data);
        List<Result> resultObj = jsonObj.results;

        //Loop over the result and show the price information
        for (int i = 0; i < resultObj.Count; i++)
        {
            double price = resultObj[i].price;
            Debug.Log("Price = \n" + price);

            if (price > 0.0f)
            {
                Debug.Log("Its Paid App\n");
            }
            else
            {
                // show ads here
            }
        }
    }
}

Объекты / классы для десериализации json в:

[Serializable]
public class Result
{
    public List<string> screenshotUrls;
    public List<string> ipadScreenshotUrls;
    public List<object> appletvScreenshotUrls;
    public string artworkUrl512;
    public string artworkUrl60;
    public string artworkUrl100;
    public string artistViewUrl;
    public List<string> supportedDevices;
    public string kind;
    public List<string> features;
    public bool isGameCenterEnabled;
    public List<object> advisories;
    public string fileSizeBytes;
    public List<string> languageCodesISO2A;
    public string trackContentRating;
    public string trackViewUrl;
    public string contentAdvisoryRating;
    public string trackCensoredName;
    public List<string> genreIds;
    public int trackId;
    public string trackName;
    public string primaryGenreName;
    public int primaryGenreId;
    public string currency;
    public string wrapperType;
    public string version;
    public int artistId;
    public string artistName;
    public List<string> genres;
    public double price;
    public string description;
    public string bundleId;
    public string sellerName;
    public bool isVppDeviceBasedLicensingEnabled;
    public DateTime releaseDate;
    public DateTime currentVersionReleaseDate;
    public string minimumOsVersion;
    public string formattedPrice;
}

[Serializable]
public class RootObject
{
    public int resultCount;
    public List<Result> results;
}
0 голосов
/ 18 мая 2018

Вы должны использовать WWW или новые UnityWebRequest классы в единстве, чтобы читать ссылки из Интернета.HttpWebRequest будет работать на большинстве платформ, но не будет работать на некоторых, таких как WebPlayer или WebGL, так как javascript не может получить доступ к IP-сокетам.

Вот пример, адаптированный из Документации

public class ExampleClass : MonoBehaviour
{
    public string url = "http://itunes.apple.com/lookup?id=1218822890";
    IEnumerator Start()
    {
        using (WWW www = new WWW(url))
        {
            yield return www;
            string textRead = www.text;
            // ...
        }
    }
}
...