Я начну с признания, что не имею опыта работы с PHP и очень плохо знаком с API-интерфейсом LinkedIn. Но вчера я настроил новый сервер Apache / PHP и добился успеха в том, чтобы заставить пользователя (1) предоставить разрешение на доступ к их r_fullprofile и r_emailaddress, (2) обменять код аутентификации на токен доступа на 60 дней и (3) сделать начальный вызов для получения профиля пользователя LinkedIn и отображения результатов. Так что я взволнован об этом.
Но не все работало, о чем я и хотел спросить.
Я основываю свой код на примере PHP-кода, который LinkedIn делает доступным на https://developer.linkedin.com/documents/code-samples. (Незначительный вопрос, так как я новичок в PHP, но мне кажется, что они пропустили закрытие ?>
в конце их кода. Может быть, это не требуется в конце файла PHP? Во всяком случае, я положил его на всякий случай.)
Различия между их кодом и моим немногочисленны.
(1) Их код определяет область таким образом:
define('SCOPE', 'r_basicprofile r_emailaddress');
но я попросил пользователя получить доступ к его полному профилю, поэтому я определил область следующим образом:
define('SCOPE', 'r_fullprofile r_emailaddress');
(2) Пример кода просто запрашивает два поля профиля:
$user = fetch('GET', '/v1/people/~:(firstName,lastName)');
Я хотел намного больше, поэтому я запросил все эти поля профиля, как определено в https://developer.linkedin.com/documents/profile-fields:
$user = fetch('GET', '/v1/people/~:(firstName,lastName,headline,industry,specialties,summary,positions,public-profile-url,email-address,interests,publications,languages,skills,certifications,educations,num-recommenders,date-of-birth,honors-awards)');
Запрос выполнен успешно, поля профиля возвращены и показаны. Но есть некоторые проблемы с немного из полей, о которых я хотел спросить.
После успешного возврата я использую операторы print, чтобы показать результаты:
print "<br />Hello $user->firstName $user->lastName. We have successfully retrieved the following information from your LinkedIn Profile.<br />";
print "<br />headline: $user->headline ";
print "<br />industry: $user->industry ";
print "<br />specialties: $user->specialties ";
print "<br />summary: $user->summary ";
// print "<br />positions: $user->positions ";
print "<br />public-profile-url: $user->public-profile-url ";
print "<br />email-address: $user->email-address ";
print "<br />publications: $user->publications ";
// print "<br />languages: $user->languages ";
// print "<br />skills: $user->skills ";
print "<br />certifications: $user->certifications ";
// print "<br />educations: $user->educations ";
print "<br />num-recommenders: $user->num-recommenders ";
print "<br />date-of-birth: $user->date-of-birth ";
print "<br />honors-awards: $user->honors-awards ";
print "<br /><br />Thanks. We hope this helps make your experience more professionally rewarding for you.";
Отображаемый результат всех приведенных выше выражений print выглядит следующим образом (хотя для краткости я здесь сократил сводку):
Hello Doug Lerner. We have successfully retrieved the following information from your LinkedIn Profile.
headline: Founder & CEO, Elliptics, Ltd.
industry: Computer Software
specialties:
summary: Although I am a U.S. citizen, since 1983 I have resided in Tokyo, where I hold permanent residency. During my first 7 years in Japan, I worked for Fujitsu, the largest computer company in Japan. At Fujitsu I was Technical Director for Fujitsu's 1990 Osaka World's Fair Omnimax/IMAX production "Echoes of the Sun". For 14 years at Nippon Electronics College, I lectured in Mathematics and Scientific Simulation in the Department of Computer Graphics, where I also served as the Director of the Virtual Reality Seminar program.
public-profile-url: -profile-url
email-address: -address
publications:
certifications:
num-recommenders: -recommenders
date-of-birth: -of-birth
honors-awards: -awards
Thanks. We hope this helps make your experience more professionally rewarding for you.
Один важный вопрос, который у меня есть, касается заявлений о печати, которые я прокомментировал выше. Последний отпечаток является подтверждением того, что я успешно достиг конца сценария. Однако, если какие-либо из этих закомментированных операторов печати включены, сценарий останавливается и ничего больше не выводится.
Как я уже упоминал, я не очень разбираюсь в PHP, поэтому одна проблема в том, что я не знаю, в чем проблема с этими конкретными операторами print. Сообщение об ошибке не отображается (я подозреваю, что настройки по умолчанию подавляют сообщения об ошибках, поэтому они не отображаются для пользователей). Поэтому я хотел бы знать одну вещь, особенно при тестировании, — какие ошибки встречаются.
Почему бы эти конкретные поля профиля: positions, languages, skills and educations
вызвать проблему? Поскольку имена полей профиля являются множественными, можно предположить, что, возможно, то, что возвращается, не является простой строкой, которая может быть показана с print
и они могут быть массивами или чем-то еще, что требует другого способа их отображения. Я не видел больше определений о значениях этих конкретных полей в документах, поэтому, если кто-нибудь сможет помочь мне с информацией о них, я буду благодарен.
Некоторые «поля множественного звучания» только что вернули пробелы: specialties, certifications, publications
так что я предполагаю, что у них были нулевые значения, а не какой-то специально отформатированный список значений, которые должны отображаться особым образом
Другие операторы печати работают и показывают фактическое содержание профиля (например, мой industry
печатается как Computer Software
(очевидно, не PHP), или в некоторых случаях строка с минусом перед ним. Например, public-profile-url: -profile-url
,
Что касается значений с минусом перед ним, что это значит? Почему мой public-profile-url
вернулся как -profile-url
? Означает ли это скрытое поле? Я не вижу, где я могу это скрыть.
Я был бы благодарен за любую информацию, которую могут предоставить люди.
У вас есть куча вопросов в одном (что обычно не рекомендуется на этом сайте), но я постараюсь ответить на каждый.
Почему именно эти поля профиля: должности, языки, навыки и образование вызывают проблемы? Поскольку имена полей профиля являются множественными, можно предположить, что, возможно, возвращаемая информация не является простой строкой, которая может быть показана с помощью print, и они могут быть массивами или чем-то еще, что требует другого способа их отображения. Я не видел больше определений о значениях этих конкретных полей в документах, поэтому, если кто-нибудь сможет помочь мне с информацией о них, я буду благодарен.
Ты прав; они, вероятно, являются массивами или объектами. Вместо этого:
print "<br />positions: $user->positions
пытаться var_dump($user->positions);
, Это покажет вам, с чем вы работаете, так что вы будете знать, как правильно с этим справиться. Вероятно, это описано в документации по API, хотя я не могу получить ссылку, которую вы разместили для загрузки.
Некоторые «множественные поля звучания» только что возвращали пробелы: специальности, сертификаты, публикации, так что я предполагаю, что у них были нулевые значения, а не какой-то специально отформатированный список значений, которые должны отображаться особым образом.
Может быть; возможно, нет. Вы должны проверить данные. В качестве отправной точки, используйте var_dump
или же print_r
чтобы увидеть, что у вас есть.
Что касается значений с минусом перед ним, что это значит? Почему мой public-profile-url возвращается как -profile-url? Означает ли это скрытое поле? Я не вижу, где я могу это скрыть.
Вы получаете дефисы (-
) потому что вы не используете правильный синтаксис. Например,
$user->date-of-birth
это неверно. Это видно как
{$user->date}-of-birth
то есть переменная $user->date
сопровождается буквальным текстом -of-birth
, что не так. Либо вы используете неправильное имя свойства, либо вам нужно использовать этот синтаксис: $user->{'date-of-birth'}
,
Чтобы использовать свойство дефисного имени в print
или же echo
тем не менее, вам действительно следует объединить его в строку. Попытка обработать это встроенным, как это:
echo "blah $user->{'hyphenated-prop'}";
не будет работать хорошо Попробуйте это вместо этого:
print "<br/>text " . $user->{'hyphenated-prop'};
Других решений пока нет …