Как да получите данни от API на Fantasy Premier League

Оригинална публикация: https://www.oddsonfpl.com/how-to-get-data-from-the-fantasy-premier-league-api/

Здравейте всички! Отдалечавам се малко от това, което обикновено публикувам, тъй като няма Фантастичен футбол, който да се играе. Тъжни времена, знам. Открих, че има празнота в живота ми от късно и все още намирам редовно да гледам / r / fantasypl subreddit, въпреки че знам, че сме на месеци от началото на следващия сезон. Интересувам се от статистика и кодиране, което може да изненада някои от вас!

Това, което открих от използването на собствената платформа на WordPress, е, че персонализирането, което имате, докато използвате тяхната платформа, ми пречеше да автоматизирам процесите, да използвам персонализирани бази данни и от своя страна трябва да използвам приставки, които просто не направиха достатъчно за уебсайта, в моето мнение.

Толкова достатъчно от мен да се оплаквам от платформата WordPress и да се върна към използването на FPL API. Някои от вас може да не знаят, че FPL предоставя API, който е на разположение безплатно за разработчици (или хора като мен, които представят познания за уеб разработка). Позволете ми да го предговора, като кажа, че не съм отличен разработчик или масово познаващ кодер, а просто някой, който намира това за интересно и иска да помогне на другите.

Първо и най-важното ще ви предоставя URL адресите за техния API:

  • https://fantasy.premierleague.com/drf/bootstrap-static - Цялата информация
  • https://fantasy.premierleague.com/drf/element-summary/176 - Информация за играча - Mahrez като пример.
  • https://fantasy.premierleague.com/drf/my-team/48049/{teamId} - Позволява на потребителя да въведе идентификационния номер на екипа си

Има редица други под URL адреси, които могат да се използват при добавяне на връзката към основния URL адрес по-долу:

Базов URL адрес: https://fantasy.premierleague.com/drf/

Относителни връзки:

  • / bootstrap (повече данни, ако са удостоверени)
  • / Фърмуера-статичен
  • / Фърмуера динамична
  • / събития
  • / елементи
  • / елемент типове
  • / тела
  • / отбори
  • / регион
  • / трансфери (изисква авт.)
  • / Влизане / {entryId}
  • / записи (не работи в предсезон?)
  • / my-team / {teamId} (изисква авт.)
  • / въведени лиги / {teamId} (изисква авт.)
  • / лиги-класически / {leagueId} (трябва да е член)
  • / лиги-класически класиране / {leagueId}
  • / ligues-h2h / {leagueId} (трябва да е член)
  • / лиги-H2H-класиране / {leagueId}

Въпреки че разбирам, че много от тези URL адреси може да са ви безполезни, ще използваме два от тях за изтегляне на данни от играчи от предишния сезон. Първоначално ще използваме / bootstrap-статични данни. От щракването върху връзката първо можете да видите раздел, наречен „фази“, който от разглеждането на следния текст се отнася до секции от сезона:

{"Id": 1, "name": "Като цяло", "start_event": 1, "stop_event": 38} - Общо показва от GW1 до GW38.

{"Id": 2, "name": "August", "start_event": 1, "stop_event": 3} - Докато ID 2, като името на август се показва от GW1 до GW3.

В следващия бит данни можете да видите, че в „елементи“ ви показва информация за играчите. Взимайки някои от данните от ID: 1, което е странно Дейвид Оспина, можете да видите, че има огромно количество информация за играчите само от това:

[{ "ID": 1, "снимка": "48844.jpg", "web_name": "Ospina", "team_code": 3, "състояние": "а", "код": 48844 "first_name": "Давид", "second_name": "Ospina", "squad_number": 13, "новини": "", "now_cost": 48, "news_added": "2018-04-29T20: 01: 18Z", "chance_of_playing_this_round" : 100, "chance_of_playing_next_round": 100, "value_form": "0.5", "value_season": "4.0", "cost_change_start" - 2 "cost_change_event" 0 ", cost_change_start_fall": 2, "cost_change_event_fall": 0, "in_dreamteam": фалшива "dreamteam_count" 0 ", selected_by_percent": "0.2", "форма": "2.3", "transfers_out": 10172 "transfers_in": 3948, "transfers_out_event" 0 ", transfers_in_event": 0 "loans_in" 0 ", loans_out" 0 ", loaned_in" 0 ", loaned_out": 0, "total_points": 19, "event_points": 8, "points_per_game": "3.8", "ep_this": "3.3", "ep_next": "1.8", "специални": фалшиви "минути": 380, "goals_scored : 0, "помага": 0, "clean_sheets": 2, "goals_conceded": 3, "own_goals": 0, "penalties_saved": 0, "penalties_missed": 0, "yellow_cards": 0, "red_cards": 0 "спестява": 9, "бонус": 1, "базисни": 86, "влияние": "75.8", "творчество": "0.0", "опасност": "0.0", "ict_index": "7.7" "ea_index" 0 ", ELEMENT_TYPE": 1, "екип": 1},

Някои от най-важните от този раздел включват:

документ за самоличност

web_name

team_code

value_season

….и така нататък. Добре, така че, знам най-вече php, html и знам малко за API-тата. Така че ще създам това, използвайки своя localhost и използвайки техния API, докато се обаждам чрез php. Значи това не означава нищо за вас, нали? Точно така. Затова нека направим това по възможно най-лесния начин. Стъпки!

Стъпка 1: Изтеглете и инсталирайте XAMPP.

https://www.apachefriends.org/index.html

Наистина е просто, но ако се мъчите да следвате стъпките в това видео в YouTube. Ако не използвате Windows 10, направете подобно търсене в Youtube. XAMPP за Linux / Apple / Windows 7 / Dos. За съжаление това няма да работи с Chromebook.

Стъпка 2: Изтеглете текстов редактор

Лично аз използвам Sublime 3, но много хора използват Notepad ++, а някои луди дори използват Notepad. Тъй като не сме чак толкова безумни стикове за Sublime или Notepad ++.

Стъпка 3: Вземете кодиране!

Така че след като текстовият редактор и вашия xampp са настроени, ще започнем да кодираме. Първо и най-важното, това ще бъде напълно функционално, доколкото ми харесва разработването на фронтенд, целта на това е да предостави на хората известни знания как да използват API и да го представят на уеб страница.

Първо, нека започнем стайлинга, необходим е някакъв стил във всеки сайт, за да изглежда наполовина приличен. Ето кода за първата ви половина на документа:



<Глава>
<Стил>
#player_info {
 семейство шрифтове: "Trebuchet MS", Arial, Helvetica, sans-serif;
 граница-колапс: колапс;
 ширина: 100%;
}
#player_info td, #player_info th {
 граница: 1px твърд #ddd;
 подплънки: 8px;
}
#player_info tr: nth-дете (дори) {background-color: # f2f2f2;}
#player_info tr: hover {background-color: #ddd;}
#player_info th {
 подложка: 12px;
 дъно с подплънки: 12px;
 подравняване на текст: вляво;
 цвят на фона: # 242424;
 цвят: бял;
}

Това е кодът, който оформя уеб страницата. Това е само основен CSS.

В „#player_info“ избираме шрифта.

С „#player_info td, #player_info th“ добавяме рамка и подплънки към клетки.

В „#player_info tr: nth-child (even) {background-color: # f2f2f2;}“ редуваме цветовете на клетката.

В „#player_info tr: hover“ ние караме клетките да променят цвета си, когато задържите курсора върху тях.

Кодът "#player_info th" се използва за промяна на цвета на заглавката. Достатъчно просто. Това е само за да изглежда хубаво и хубаво!

След това извикваме API чрез PHP! Супер интересно, знам! За целта използваме функцията file_get_contents, която получава цялото съдържание от уебсайт. В този случай това е статичната страница за зареждане. Дадохме обаждането php име на $ json за по-нататъшно препращане към него.

След като извикаме API, тогава създаваме друга променлива с името на $ data и използваме json_decode, който взема кодиран низ от JSON и го преобразува в променлива PHP. Това ни дава възможност да завършим кода. Един човек в работата ми предложи да използвам guzzlephp, но аз съм noob и това работи, така че, мех. Кодът отдолу е както следва:

$ data = json_decode ($ json, вярно);
?>

След това създаваме таблица, защото стилистиката, която направихме по-горе, щеше да отпадне, ако не бяхме, а аз не съм тук, за да ви губя времето.

Тъй като този API има много различни секции в него, филтрирах някои от безполезните от него и запазих само 31 колони, които смятам, че хората ще намерят полезни. Да, само 31. Добре, така че сега обратно към кода, идентификационният номер на таблицата съвпада с CSS и е обозначен като player_info, докато означава ред на таблицата, означава заглавка на таблицата и просто стойки за стандартна клетка в таблица.


 <То> ID 
 
 
 
 <Ти> Екип 
 <Ти> Новини 
 <То> Позиция 
 
 
 
 
 
 
 
 
 <То> протокола 
 
 <та> Асистенции 
 
 
 
 
 
 
 
 <То> спестява 
 
 
 <То> Влияние 
 <То> творчество 
 <То> заплаха 
 
 

Както можете да видите от горното, има много хедъри, някои от тях са полезни, други не толкова много, аз лично никога няма да избера играч на базата на техния EA индекс, но някои изроди може да са. И така от това, сега влизаме в азотно-зърнестата, наистина невероятно трудната част от нея.

? PHP
foreach ($ data ['elements'] като $ key => $ item)
{
 ?>

В оператора foreach използва кодирания по-рано JSON, който е създаден по-рано в променливата $ data. От самото сърфиране до URL адреса: https://fantasy.premierleague.com/drf/bootstrap-static можете да видите, че JSON има множество секции, които могат да бъдат изтеглени от JSON, така че избрахме секцията, наречена елементи, за да извлечем нашите данни от, тъй като фазите не биха били толкова полезни.

Всеки от тези елементи след това ще бъде въведен като $ ключ от масив в променливата $ елемент. Това ще ни даде възможност да въведем всички елементи в таблица благодарение на цикъла на foreach, който няма да спре, докато няма повече елементи за въвеждане. Едно нещо обаче е, че всеки елемент трябва да бъде свързан обратно към API и да бъде подравнен към заглавката.

От връзката boostrap някои от имената като now_cost и код трябва да бъдат въведени в оператора echo, за да може да извика API и да го въведе в таблицата. Ако погледнете таблицата по-горе, можете да видите, че първият ред е

, докато първият ред в PHP е  
Уеб име Идент. № на играча Пълно име Текуща цена Сезон на стойност Промяна на разходите от началото Процент, избран от Трансфери в Прехвърля се Общо точки Точки за игра Голове отбелязани Чисти листове Цели, постигнати Собствени цели Наказанията са запазени Пропуснати наказания Жълти карти Червени карти Бонус точки Системен резултат за бонус точки Индекс на ИКТ ЕА индекс ID . Редът, който е само ID, може да бъде обозначен като нищо, тъй като към него няма код за повикване, но PHP echo $ item call трябва да извика елемент в API. Има също така съчетани със заглавния ред, така че е добре да ги съпоставите с заглавките на таблицата.

https://fantasy.premierleague.com/drf/bootstrap-static

Кодът за това е:

                                                                   

И така, това е нашата PHP страница, която изтегля данните на всеки играч от API и го представя в прекрасен (лайна) уебсайт. Сайтът трябва да изглежда така:

Ако искате да видите репо, то е достъпно на моя GitHub тук: https://github.com/pkgrem/OddsOnFPL и е файлът fplinfo.php. Имам няколко други там, с които съм се борил през годината, главно поради време, сърдечни удари, махмурлук, преподавайки Шано как да използва сумата в excel и се съсредоточи върху спечелването на моите лиги за пари.

Предполагам, че някои от вас са искали да изтеглят тези данни? Проклет да си. Добре, тук ще добавя бутон за изтегляне, за да може да се изтегли CSV файл. Първо, добавих бутон отгоре, за да изтеглите CSV файл, който onclick активира функция на JavaScript.

Функцията doCSV () е по същество част от javascript, която замества етикетите на HTML таблицата с бяло пространство и запетаи, както и създава прекъсвания на реда. Това отне повече време от очакваното. / G е функцията за замяна в JavaScript, докато има запетаи създава разделители на запетаи, които са необходими в CSV файловете. \ R \ n е нов ред и връщане на карета (т.е. преместете курсора вляво), който стартира нов ред в CSV файла.

Поставих този скрипт в долната част на HTML.