iTunes API (http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html) を使用してポッドキャストを検索すると、オーディオとビデオの両方のポッドキャストが結果に含まれます。API からオーディオ ポッドキャストのみを取得する方法はありますか?
前もって感謝します :-)
ドキュメントからは、オーディオとビデオのポッドキャストのフィルタリングが可能であるかのようには見えません。ただし、結果のアイテムをループして、各アイテムがオーディオかビデオかを確認してフィルタリングすることができます。RSS フィードから追加情報を見つけるか、または subscribePodcast URL を使用して iTunes に別の呼び出しを行うことで、これを行うことができます (例を参照)。
システムを使用する;
System.Collections.Generic の使用;
System.Linq を使用します。
System.Text を使用します。
System.Net を使用。
System.Web.Script.Serialization の使用;
System.Xml.Linq を使用します。
System.IO の使用;
名前空間 ConsoleTest
{
クラス プログラム
{
static void Main(string[] args)
{
//Windows Weekly を検索中
string url = "https://itunes.apple.com/search?term=Windows%20Weekly&media=podcast&attribute=audio";
文字列 json = FetchHTML(url);
JavaScriptSerializer s = new JavaScriptSerializer();
var result = s.Deserialize(json);
var audioOnly = 新しいリスト();
foreach (result.Results の var item)
{
if (!IsVideo(item.TrackId))
{
audioOnly.Add(アイテム);
}
}
foreach (audioOnly の変数 au)
{
Console.WriteLine(au.TrackName);
}
Console.ReadLine();
}
static bool IsVideo(文字列 ID)
{
文字列 req = "https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/com.apple.jingle.app.finance.DirectAction/subscribePodcast?id=" + id + "&wasWarnedAboutPodcasts=true";
文字列 xml = FetchHTML(req,true);
bool isVideo = false;
var re = XElement.Load(new StringReader(xml)).Elements("dict").Elements("dict");
次のブール値 = false;
foreach (re.Elements() の var e)
{
もし(次)
{
//これは動画の値です
isVideo = e.Name.LocalName.Trim().ToLower() == "true";
次=偽;
壊す;
}
if (e.Value == "is-video")
{
次 = 真;
}
}
isVideo を返します。
}
静的文字列 FetchHTML(string url,bool doItAsITunes = false)
{
文字列 htmlCode = "";
使用 (WebClient クライアント = 新しい WebClient())
{
もし (doItAsITunes)
{
client.Headers.Add("user-agent", "iTunes/9.1.1");
}
htmlCode = client.DownloadString(url);
}
htmlCode を返します。
}
}
パブリック クラス SearchResult
{
public SearchResult()
{
結果 = 新しいリスト();
}
public int ResultCount { セット; 得る; }
公開リストの結果{セット; 得る; }
}
パブリック クラス アイテム
{
パブリックアイテム()
{
GenreIDs = new List();
ジャンル = 新しいリスト();
}
パブリック文字列 WrapperType { セット; 得る; }
パブリック文字列種類{セット; 得る; }
パブリック文字列 ArtistID { セット; 得る; }
パブリック文字列 CollectionID { セット; 得る; }
パブリック文字列 TrackId { セット; 得る; }
パブリック文字列 ArtistName { セット; 得る; }
パブリック文字列 CollectionName { セット; 得る; }
パブリック文字列のトラック名 { セット; 得る; }
パブリック文字列 CollectionCensoredName { セット; 得る; }
パブリック文字列 TrackCensoredName { セット; 得る; }
パブリック文字列 ArtistViewUrl { セット; 得る; }
パブリック文字列 FeedUrl { セット; 得る; }
パブリック文字列 TrackViewUrl { セット; 得る; }
パブリック文字列 PreviewUrl { セット; 得る; }
public string ArtworkUrl60 { セット; 得る; }
public string ArtworkUrl100 { セット; 得る; }
public float CollectionPrice { セット; 得る; }
public float TrackPrice { セット; 得る; }
パブリック文字列 CollectionExplicitness { セット; 得る; }
パブリック文字列 TrackExplicitness { セット; 得る; }
パブリック文字列 DiscCount { セット; 得る; }
パブリック文字列 DiscNumber { セット; 得る; }
パブリック文字列 TrackCount { セット; 得る; }
パブリック文字列トラック番号{セット; 得る; }
パブリック文字列 TrackTimeMillis { セット; 得る; }
パブリック文字列国{セット; 得る; }
パブリック文字列通貨{設定; 得る; }
パブリック文字列 PrimaryGenreName { セット; 得る; }
public List GenreIDs { セット; 得る; }
パブリック リスト ジャンル { セット; 得る; }
}
}
はい。通常の検索では、すべてを取得します: https://itunes.apple.com/search?term=jack+johnson
ただし、たとえばリクエストにいくつかのパラメーターを追加できます(あなたの場合)
&entity=song
したがって、リクエストは次のようになります。
https://itunes.apple.com/search?term=jack+johnson&entity=song
詳細については、このドキュメントの検索セクションをご覧ください