2011-12-15 9 views
0

私のFacebookアプリケーションのユーザーにYouTubeの動画を投稿させたいと思います。 すべてのユーザーは、入力テキストボックスにYouTubeリンクを挿入できます。 Facebookの壁に動画を投稿するのと同じ動作です。 アプリケーションはリンクから動画IDを抽出し、別のYouTubeリンクを作成します。
例えば、リンクがある場合:JBWd_yJPbr8と要求  http://gdata.youtube.com/feeds/api/videos/JBWd_yJPbr8youtube apiを使わずにyoutube xmlを解析する方法

なるという問題が返さを解析することである。http://www.youtube.com/watch?v=JBWd_yJPbr8&feature=related
IDでありますXML。これは標準的なXMLではありません。少なくとも、標準のXMLパーサを使用して動作するようにはなっていません。このXMLをどのように解析できますか?私はTisのケースがスロー例外で

using (XmlReader reader = XmlReader.Create(new StringReader(xmlString))) 
{ 
    XmlWriterSettings ws = new XmlWriterSettings(); 
    ws.Indent = true; 
    using (XmlWriter writer = XmlWriter.Create(output, ws)) 
    { 




      while (reader.Read()) 
      { 
       switch (reader.NodeType) 
       { 
        case XmlNodeType.Element: 
         writer.WriteStartElement(reader.Name); 
         break; 
        case XmlNodeType.Text: 
         writer.WriteString(reader.Value); 
         break; 
        case XmlNodeType.XmlDeclaration: 
        case XmlNodeType.ProcessingInstruction: 
         writer.WriteProcessingInstruction(reader.Name, reader.Value); 
         break; 
        case XmlNodeType.Comment: 
         writer.WriteComment(reader.Value); 
         break; 
        case XmlNodeType.EndElement: 
         writer.WriteFullEndElement(); 
         break; 
       } 
      } 

     } 
    } 

...サムネイル、タイトルと説明を必要とする:それは非常にあるhttp://www.codeproject.com/KB/cs/youmanager.aspx?display=Print

case XmlNodeType.Element: 
writer.WriteStartElement(reader.Name); 

要素が有効ではありません

+0

(XmlReader reader = XmlReader.Create(new StringReader(xmlString)))... – user750487

答えて

1

を入力あなたはこれを試してみました良い例

+0

良い例ですが、私はyoutube APIを使用できません... – user750487

3

Json.Netを使用すると、返されたjson応答を次のように解析できます。

(私はあなたのURLに?alt=jsonを追加)

System.Net.WebClient wc = new System.Net.WebClient(); 
string s = wc.DownloadString("http://gdata.youtube.com/feeds/api/videos/JBWd_yJPbr8?alt=json"); 

JObject JObj = (JObject)JsonConvert.DeserializeObject(s); 

var entry = JObj["entry"]; 
Console.WriteLine("TITLE: " + entry["title"]["$t"]); 
Console.WriteLine("DESC : " + entry["media$group"]["media$description"]["$t"]); 
foreach (var thumbnail in entry["media$group"]["media$thumbnail"]) 
{ 
    Console.WriteLine(thumbnail["url"]); 
} 
+0

ありがとう!しかし、私はこの場合にajaxリクエストを使用する必要があります – user750487

+0

@ user750487、Ajax?どういう意味ですか?厳密にxml?どうして? –

+0

私の間違い:JSonはこのケースには理想的です。私はまだこのコードを使用していました。完璧な作業。どうもありがとう! – user750487

1

XMLと間違って何もありません - それは罰金解析します。問題はあなたのXMLを書く方法です。

コードwriter.WriteStartElement(reader.Name);は動作しません。reader.Nameは「app:control」のような文字列を返します。要素名にコロンを使用することはできません。

ここで、xmlにはタグ名にコロンが付いています。コロンの前のビットがタグが属する名前空間を示すためです。

あなたは行交換する場合:あなたのコードは、XMLの罰金を実行し、解析する必要があります

case XmlNodeType.Element: 
    writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI); 
    break; 

case XmlNodeType.Element: 
    writer.WriteStartElement(reader.Name); 
    break; 

を。

出力されたxmlはあなたが望むものではないので、コードにはまだ何らかの作業が必要です。

+0

@ user750487 - これがあなたの質問に答えた場合は、それを受け入れられた回答とマークすることを検討してください。 – StanK

関連する問題