1

Dota 2、League of Legends、StarCraft 2のライブストリームを表示する小さなプロジェクトに取り組んでおり、Twitch.tvとown3dの両方からのフィードを持つサードパーティのホストAPIを使用していました。サーバーをシャットダウンしてください!

Yahooパイプと一緒にマージしてみましたが、運が悪かったです!これらは私が扱っている2つのフィードです:

Twitch.tv/justin.tv-http://api.justin.tv/api/stream/list.xml?category=gaming&limit=15 _

Own3d- http: //api.own3d.tv/live?limit=15

これが、2つのフィードを重ねて表示することで、2つのフィードを組み合わせるという私の試みです。これは一時的な解決策ですが、ライブの視聴者によって並べ替えられていません(これは私がやりたいことです)-

私が持っている現在のスクリプト:

<table class="table">
<thead>
<tr>
<th colspan="4" class="streamheader">Current live Sstreams</th>
</tr>
</thead>

<tbody>

<?php

$xmlFileData2 = file_get_contents("http://api.own3d.tv/live?limit=15");

$xmlData2 = new SimpleXMLElement($xmlFileData2);

foreach($xmlData2->channel->item as $item) 

if ($item->misc['game'] == 'Dota 2' OR $item->misc['game'] == 'League of Legends' OR $item->misc['game'] == 'StarCraft II') {

{

$titlelimit = $item->title;

$title = substr($titlelimit,0,20);

echo "<tr><td>";

if ($item->misc['game'] == 'League of Legends')
echo"<img src='http://localhost/ae/wp-content/themes/ae/img/lol.jpg' /></td><td>";
elseif ($item->misc['game'] == 'StarCraft II')
echo"<img src='http://localhost/ae/wp-content/themes/ae/img/sc2.jpg' /></td><td>";
elseif ($item->misc['game'] == 'Dota 2')
echo"<img src='http://localhost/ae/wp-content/themes/ae/img/dota2.jpg' /></td><td>";

else
echo "none";

echo "<a href='";
$link = $item->link;             
$findthis ="/www.own3d.tv/live/"; 
$replacement ="ae/stream/"; 
echo str_replace ($findthis, $replacement, $link);
echo "'>";
echo $title;
echo "</a></td><td>";
$author = $item->author;             
$find ="/rss@own3d.tv/"; 
$replace =""; 
echo preg_replace ($find, $replace, $author);
echo "<td>";
echo $item->misc['viewers']; 
echo "</td> </tr>";

}
}
else
{
echo "";
}

$xmlFileData1 = file_get_contents("http://api.justin.tv/api/stream/list.xml?category=gaming&limit=15");

$xmlData1 = new SimpleXMLElement($xmlFileData1);

foreach($xmlData1->stream as $itemtwitch) {

$game = $itemtwitch->meta_game;

$sc2 = "StarCraft II: Wings of Liberty";

if ($itemtwitch->meta_game == 'Dota 2' OR $itemtwitch->meta_game == 'League of Legends' OR $itemtwitch->meta_game == 'StarCraft II: Wings of Liberty') {
{
echo "<tr><td>";

$titlelimittwitch = $itemtwitch->title;

$titlelimittwitch = substr($titlelimittwitch,0,20);

if ($itemtwitch->meta_game == 'League of Legends')
echo"<img src='http://localhost/ae/wp-content/themes/ae/img/lol.jpg' /></td><td>";
elseif ($itemtwitch->meta_game == 'StarCraft II: Wings of Liberty')
echo"<img src='http://localhost/ae/wp-content/themes/ae/img/sc2.jpg' /></td><td>";
elseif ($itemtwitch->meta_game == 'Dota 2')
echo"<img src='http://localhost/ae/wp-content/themes/ae/img/dota2.jpg' /></td><td>";
else
echo "none";

$data = $itemtwitch->name;
$find ="/live_user_/";
$replace ="";
echo "<a href='";
echo "http://localhost/ae/stream/";
echo preg_replace ($find, $replace, $data);
echo "''>";
echo "$titlelimittwitch";
//print(" - " . $itemtwitch->meta_game . "");
echo "</a></td><td>";
echo preg_replace ($find, $replace, $data);
print("</td><td>" . $itemtwitch->channel_count . "</td></tr>");
}
}
else {
echo "";
}
}
?>

<tr>

<th colspan="4" class="streamheader centered">View all streams</th>
</tr>   
</tbody>
</table>

どんなガイダンスや正しい方向に向けられても素晴らしいでしょう。

乾杯!

4

2 に答える 2

0

Streamtastic(免責事項:私が書いたもの)のようなライブラリを使用して、Own3dとTwitch.tvの両方の最新のトップビューストリームを取得できます。

https://github.com/sergiotapia/Streamtastic

使用法は非常に簡単です:

Own3dの例:

StreamFinder own3dStreamtastic = new StreamFinder(new Own3dStreamRepository());

// Let's find the most viewed streamers in general.
var topStreamers = own3dStreamtastic.FindTopViewedStreams();
foreach (var stream in topStreamers)
{
    Console.WriteLine(String.Format("{0} - Viewers: {1}", stream.Title, stream.ViewerCount));
}

// You can find the top viewed streamers for any game Own3d supports.
// For example, League of Legends.
var topStreamersForLeagueOfLegends = own3dStreamtastic.FindTopViewedStreamsByGame("League+of+Legends");
foreach (var stream in topStreamersForLeagueOfLegends)
{
    Console.WriteLine(String.Format("{0} - Viewers: {1}", stream.Title, stream.ViewerCount));
}

// Or how about League of Legends.
var topStreamersForLol = own3dStreamtastic.FindTopViewedStreamsByGame("League+of+Legends");
foreach (var stream in topStreamersForLol)
{
    Console.WriteLine(String.Format("{0} - Viewers: {1}", stream.Title, stream.ViewerCount));
}

PHPを使用しているので、このアプリケーションを実行して結果をデータベースに保存するだけです。次に、PHPプログラムにデータベースから結果をフェッチさせるだけです。

于 2012-07-01T14:46:10.360 に答える
0

ダン、両方の情報セット(own3d / twitch)を同じ配列に追加してから、並べ替える必要があります。それらを$streamArrayという名前の配列に追加すると、次のコードを使用してビューアで並べ替えます。

foreach ($streamArray as $key => $row) {
 $viewers[$key] = $row['viewers'];
}

array_multisort($viewers, SORT_DESC, SORT_NUMERIC, $streamArray);

私はhttp://halfw.com/streams.phpで同様のセットアップを開発しました

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2012-07-02T21:02:55.463 に答える