私はGoogleのYouTube APIで遊んでいるので、ユーザーからのすべてのサブスクリプションを返したいと思います。
私はサブスクリプション(最大50)を取得し、ユーザーが50を超えるサブスクリプションを持っている場合、より多くを得るためにこの関数をビルドしました。自分自身を呼び出す関数から配列をマージする
しかし、私はどのように各関数呼び出しからの配列をマージするか分かりません。 (最後のwhileループを参照してください)。
新しい配列は古い配列を上書きするだけですが、配列をメイン配列に追加して返してみましたが、配列自体が配列になります。
Array
(
[0] => Array
(
[channelName] => break
[channelLink] => https://www.youtube.com/channel/UClmmbesFjIzJAp8NQCtt8dQ
)
[1] => Array
(
[channelName] => kn0thing
[channelLink] => https://www.youtube.com/channel/UClmmbesFjIzJAp8NQCtt8dQ
)
[2] => Array
(
[channelName] => EpicMealTime
[channelLink] => https://www.youtube.com/channel/UClmmbesFjIzJAp8NQCtt8dQ
)
)
だから、問題はwhileループです:
foreachループは、次のようになります配列を返します。何か考えましたか?
$subscription = getUserSubscriptions($username, $startIndex);
これは、返される結果とサブスクリプションの配列を上書きしているように見えるので、あなただけの最後になるだろう:
// Get an array with videos from a certain user
function getUserSubscriptions($username = false, $startIndex = 1, $maxResults = 50) {
// if username is not set
if(!$username) return false;
// get users 50 first subscriptions
// Use start-index to get the rest
$ch = curl_init('https://gdata.youtube.com/feeds/api/users/'.$username.'/subscriptions?v=2&max-results='.$maxResults.'&start-index='.$startIndex);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$subscriptionsXML = curl_exec($ch);
curl_close($ch);
// convert xml to array
$subscriptionsArray = XMLtoArray($subscriptionsXML);
// Ge total number of subscriptions
$totalNumberOfSubscriptions = $subscriptionsArray['FEED']['OPENSEARCH:TOTALRESULTS'];
// Parse array and clean it up
$s = 0;
$l = 0;
foreach($subscriptionsArray['FEED']['ENTRY'] as $subscriptionArray) {
// get link
foreach($subscriptionArray['LINK'] as $channelLinks) {
$channelLinkArray[$l] = $channelLinks;
$l++;
}
// save all into a more beautiful array and return it
$subscription[$s]['channelName'] = $subscriptionArray['YT:USERNAME']['DISPLAY'];
$subscription[$s]['channelLink'] = $channelLinkArray[1]['HREF'];
$s++;
}
// if we did not get all subscriptions, call the function again
// but this time increase the startIndex
while($totalNumberOfSubscriptions >= $startIndex) {
$startIndex = $startIndex+$maxResults;
$subscription = getUserSubscriptions($username, $startIndex);
}
return $subscription;
}
良いアイデア。しかし、何かがnullを返し、array_mergeがエラーを返すようです。 – Patrik
ああ、条件が満たされない場合に 'foreach'の前に$ subscriptionを空の配列として初期化する必要があります。あなたの関数の先頭に '$ subscription = array();'を置いてみてください。 – Dan
すごく元気です。できます!ありがとう:) – Patrik