0

Всем привет, пытаюсь сделать цикл, который будет делать Get запросы по ссылкам из списка, а также сортировать их. Есть два списка "Новые ссылки" и "Старые ссылки". Переменной "Текущая ссылка" мы присваиваем значение из листа "Новых ссылок" по индексу 0. После чего мы делаем GET запрос по "Текщей ссылке", очищаем ответ с помощью регулярок и работой со строками до состояния обычной ссылки формата https://site.com/.../.../ и т.д., заносим эти значения в список "Новые ссылки", после добавляем "Текущую ссылку" в список "Старые ссылки" и удаляем эту ссылку из "Новые ссылки". А когда ссылки в "Новых ссылках" закончатся выйти из цикла. Возможно написал ересь, но я только недавно начал изучать C# и пока смог понять эту задачку таким образом. Вот мой код. Он делает get запросы по ссылкам после первого get запроса, но дальше не спускается. Подскажите что делаю не так. И если не сложно подскажите, что почитать или посмотреть, чтобы лучше разобраться в проблеме. Заранее спасибо

private async void button4_Click(object sender, EventArgs e)
    {
        string currLinks;
        int indexCurrLinks = 0;
        var NewLinks = new List<string>();
        var OldLinks = new List<string>();
        var LinksRVT = new List<string>();
    //Производим очистку Json ответа, и переносим URL с текстовой переменной в Список
    try
    {
        string text = await GetApiRequestAsync(&quot;https://developer.api.autodesk.com/project/v1/hubs&quot;);
        Regex regex = new Regex(@&quot;(?&lt;=href&quot;&quot;:&quot;&quot;)(.*?)&quot;&quot;&quot;, RegexOptions.Multiline | RegexOptions.Compiled);
        MatchCollection matches = regex.Matches(text);
        if (matches.Count &gt; 0)
        {
            foreach (Match match in matches)
                richTextBox5.Text += ($&quot;{match.Value.TrimEnd(&quot;\&quot;&quot;.ToCharArray())}\n&quot;);
            listBox1.Items.AddRange(richTextBox5.Lines);
            NewLinks.AddRange(richTextBox5.Lines);
        }
        else
            MessageBox.Show(&quot;Совпадений не найдено&quot;);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    //Создаём цикл, который будет брать по индексу ссылку из Нового списка,
    //приравнивать к переменной для нового GET запроса, очищать Json ответ(регулярными выражениями)
    //до получения ссылок, и переносить их в Новый список, если этих ссылок нет в Старом списке

        for (currLinks = NewLinks[indexCurrLinks]; NewLinks.Count != 0; currLinks = NewLinks[indexCurrLinks++])
        {
            try
            {
                //Делаем GET запрос
                string text = await GetApiRequestAsync(currLinks);
                //очищаем регулярками
                Regex regex = new Regex(@&quot;(?&lt;=href&quot;&quot;:&quot;&quot;)(.*?)&quot;&quot;&quot;, RegexOptions.Multiline | RegexOptions.Compiled);
                MatchCollection matches = regex.Matches(text);
                if (matches.Count &gt; 0)
                {
                    foreach (Match match in matches)
                    richTextBox5.Text += ($&quot;{match.Value.TrimEnd(&quot;\&quot;&quot;.ToCharArray())}\n\n\n&quot;);

                    //В список NewLinks из rtb5 заносим ссылки
                    NewLinks.AddRange(richTextBox5.Lines);
                    //Добавляем currLinks в список OldLinks
                    OldLinks.Add(NewLinks[indexCurrLinks]);
                    //Удаляем currLinks из списка NewLinks
                    NewLinks.RemoveAt(indexCurrLinks);

                    currLinks = NewLinks[indexCurrLinks];

                if (indexCurrLinks == 0)
                {
                    break;
                }
            }
                else
                richTextBox6.Text += (&quot;Совпадений не найдено\n\n\n&quot;);
                richTextBox6.Text += ($&quot;{text}\n\n\n&quot;);
            }
            catch (Exception ex)
            {
                richTextBox6.Text += $&quot;{ex.Message}\n\n\n&quot;;
            }
        //Проверяем не внесены ли ссылки в OldLinks, если нет, результаты вносим в NewLinks


        //Запускаем цикл заново пока NewLinks список не станет пустым

    }


}

  • 1
    Во-первых, Как распарсить HTML в .NET?. Во-вторых, Как сериализировать и десериализировать JSON в .NET. В-третьих вы написали, что делаете, но не написали, что пытаетесь сделать, то есть какую задачу решаете? Берем JSON, берем нужные поля из него (из кода не понятно, какие и что содержит ответ от сервера), а дальше что должно происходить? – aepot Apr 26 '21 at 13:09
  • Я пытаюсь сделать цикл, который делает get запросы по url из списка "Новые ссылки". Очищает ответы get запросов до состояния ссылок, заносит в "Новые ссылки". А ссылку по которой только, что сделал get запрос переносил в список "Старые ссылки". Делаю это, чтобы найти файлы определенного расширения .rvt, занести их в список "Ссылки с РВТ", а после скачать их. Некий парсер для поиска файлов(Если так можно сказать) – Игорь Кречко Apr 26 '21 at 13:25
  • Результаты ответа сервера разные(в зависимости от того какие директории, будут созданы), но структура будет похожа на ту, что есть в этой документации https://forge.autodesk.com/en/docs/data/v2/tutorials/download-file/ – Игорь Кречко Apr 26 '21 at 13:32
  • Если в лоб, то 1) int indexCurrLinks = 0; это уберите совсем. 2) вот эту строку for (currLinks = NewLinks... замените на эту for (int index = 0; index < NewLinks.Count; index++) 3) внутри цикла string text = await GetApiRequestAsync(NewLinks[index]); – aepot Apr 26 '21 at 13:35
  • Спасибо, сейчас попробую – Игорь Кречко Apr 26 '21 at 13:37

0 Answers0