Почему определенные поля API профиля LinkedIn вызывают проблемы при отображении после успешного возврата в PHP?

Я начну с признания, что не имею опыта работы с 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? Означает ли это скрытое поле? Я не вижу, где я могу это скрыть.

Я был бы благодарен за любую информацию, которую могут предоставить люди.

0

Решение

У вас есть куча вопросов в одном (что обычно не рекомендуется на этом сайте), но я постараюсь ответить на каждый.

Почему именно эти поля профиля: должности, языки, навыки и образование вызывают проблемы? Поскольку имена полей профиля являются множественными, можно предположить, что, возможно, возвращаемая информация не является простой строкой, которая может быть показана с помощью 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'};

Вот демо.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]