Как сделать подобный поиск в "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 - became
global`;
Изменен метод "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;
}
Будет ли это нормальным решением или может быть принято более грамотно?