Если ваша цель состоит в том, чтобы перечислить все последующие области обучения в области компьютерных наук, вам нужно будет делать рекурсивные вызовы, поскольку для каждой области обучения индексируются только непосредственные уровни (имеется в виду родители и дети, а не бабушки и дедушки или внуки).
К счастью, это довольно тривиальная вещь для выполнения sh с помощью выражения запроса "Composite (FP.FId = parent_fos_id)".
Вот пример кода C#, чтобы получить все Области изучения потомков (извините, я не Python подкован, но должно быть легко понять, что я делаю):
static void GetAllDescendantFieldsOfStudy(long fieldOfStudyId, int level, ref SortedSet<long> descendants)
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "_subscription_key_");
var jsonString =
client
.GetStringAsync(
new Uri($"https://api.labs.cognitive.microsoft.com/academic/v1.0/evaluate?expr=Composite(FP.FId={fieldOfStudyId})&model=latest&count=1000&offset=0&attributes=Id,DFN"))
.Result;
var jsonObject = Newtonsoft.Json.Linq.JObject.Parse(jsonString);
var childCount = jsonObject["entities"].Count();
if (childCount > 0)
{
var children = jsonObject["entities"];
foreach (var child in children)
{
var childId = child.Value<long>("Id");
if (!descendants.Contains(childId))
{
descendants.Add(childId);
Console.WriteLine($"{new String('\t', level)}Expanding {child.Value<string>("DFN")}");
GetAllDescendantFieldsOfStudy(childId, level + 1, ref descendants);
}
}
}
}
Чтобы использовать это, просто позвоните в Computer Science ID, например:
var descendants = new SortedSet<long>();
GetAllDescendantFieldsOfStudy(41008148, 0, ref descendants);
К сожалению, нет способа обойти максимальное число результатов 1000. Вам просто нужно разбить ваши запросы, используя смещение.
Надеюсь, это поможет !