Как сделать подобный поиск в "github.com"?

Используется - "octokit.net".
Я заинтересован в поиске "репозиториев", "пользователей" и фильтрации результатов по языку.

Сценарий:
1. Пользователь. Введите поисковую фразу;
2. Сайт. Выполняет поиск;
3. Сайт. Отображает результат:
а. хранилища;
б. пользователей;
Фильтр:
- языки;

После нажатия кнопок "Репозитории" или "Пользователи" результат отображается в таблице.
После нажатия на языки (например, "C #") результаты фильтруются.

Общий результат поиска:
Хранилища
- Хранилища - 108 951 результатов
- C # (хранилище) - 4315 результатов
пользователей
- Пользователи - ~ 4K
- C # (пользователи) - ~ 72

Как повторить этот скрипт поисковой системы?
Я написал предварительный код, но я не понимаю, как заставить его работать более правильно.

Метод не завершен "searchUser (строка searchQuery_str)".
Я планирую сделать это по аналогии с "SearchReposit (string searchQuery_str, string lang_str)"

Текущая кодовая логика:
- поиск по всем хранилищам:
- Отправить запрос;
- получаем ответ;
- поиск в репозиториях, использующих C#:
- Отправить запрос;
- фильтруем запрос по языку "C#";
- получаем ответ;
Те. Теперь для каждого случая выполняется отдельный запрос (запрос var), но мне кажется, что вам нужно выполнить один запрос, а затем выполнить над ним следующие действия:
- фильтр;
- Сортировать;
- четкая фильтрация;
- четкая сортировка.

Вопрос в том, как сделать возможным выполнение одного запроса, а затем выполнить над ним следующие действия:
- фильтр;
- Сортировать;
- четкая фильтрация;
- четкая сортировка
- подсчитать количество результатов поиска?

Правильно ли я понимаю логику и возможно ли это сделать?

Если я правильно понимаю, работа с поиском "пользователи" будет аналогична поиску "хранилища".

Ссылка на поисковую документацию - Ссылка

введите описание изображения здесь
введите описание изображения здесь

private async void button1_Click(object sender, EventArgs e)
{
    // Получаем поисковую фразу
    string searchQuery_str = Search_txB.Text;
    string lang_str;
      
    // Поиск по репозитариям. "Результат"
    lang_str = "";
    var countRepo = await SearchReposit(searchQuery_str, lang_str);
 
    label5.Text = countRepo;
 
    // Поиск по репозитариям. "Результат"
    lang_str = "C#";
    var countRepoLang = await SearchReposit(searchQuery_str, lang_str);
 
    label7.Text = countRepoLang;
}
 
public async Task<string> SearchReposit(string searchQuery_str, string lang_str)
{
    // Поиск по "Реозитариям"
    var request = new SearchRepositoriesRequest(searchQuery_str); // mvc client side framework - Структура клиентской стороны mvc           
 
    switch (lang_str)
    {
       case "C#":
           request.Language = Language.CSharp;
           break;                
    }
 
    var resultRepo = await client.Search.SearchRepo(request);
 
    // Количество репозитариев
    decimal countRepo_dec = Convert.ToDecimal(resultRepo.TotalCount);
 
    // Количество репозитариев. Форматирование
    string countRepo_str = formatValue(countRepo_dec);
 
    return countRepo_str;            
}
 
// Поиск по "Пользователям" ()
public async void searchUser(string searchQuery_str)     
{        
    var request = new SearchUsersRequest(searchQuery_str); // _____
 
    var resultUser = await client.Search.SearchUsers(request);
 
    label6.Text = resultUser.TotalCount.ToString();
    // var resultUsers = await client.Search.SearchUsers(request);
}

1 ответ

Решение

Изменил переменную request:
- было var - стал SearchRepositoriesRequest;
- было local - becameglobal`;

Изменен метод "SearchReposit (строка searchQuery_str, строка lang_str)"
- добавил аргумент "bool null_flg" - стал "SearchReposit (строка searchQuery_str, строка lang_str, bool null_flg)";
- добавлена ​​проверка "bool null_flg";

if (null_flg == false)
{
request = new SearchRepositoriesRequest (searchQuery_str);
}

Код выглядит так

SearchRepositoriesRequest request;
    public async Task<string> SearchReposit(string searchQuery_str, string lang_str, bool null_flg)
            {
                //SearchRepositoriesRequest request = new SearchRepositoriesRequest();
                // Поиск по "Реозитариям"
                // if (request == null) // ошб
                if (null_flg == false)
                {
                     request = new SearchRepositoriesRequest(searchQuery_str); // mvc client side framework - Структура клиентской стороны mvc           
                    // return request; 
                }

                switch (lang_str)
                {
                   case "C#":
                       request.Language = Language.CSharp;
                       break;                
                }

                var resultRepo = await client.Search.SearchRepo(request);

                // Количество репозитариев
                decimal countRepo_dec = Convert.ToDecimal(resultRepo.TotalCount);

                // Количество репозитариев. Форматирование
                string countRepo_str = formatValue(countRepo_dec);

                return countRepo_str;            
            }


    private async void button1_Click(object sender, EventArgs e)
            {
                // Получаем поисковую фразу
                string searchQuery_str = Search_txB.Text;
                string lang_str;
                bool null_flg;


                // Поиск по репозитариям. "Результат"
                lang_str = "";
                null_flg = false;
                var countRepo = await SearchReposit(searchQuery_str, lang_str, null_flg);
                null_flg = true;

                label5.Text = countRepo;

                // Поиск по репозитариям. "Результат"            
                lang_str = "C#";
                var countRepoLang = await SearchReposit(searchQuery_str, lang_str, null_flg);

                label7.Text = countRepoLang;

            }

Будет ли это нормальным решением или может быть принято более грамотно?

Другие вопросы по тегам