Archive for 2012年6月

WebView で、YouTube のフルスクリーンが再生できない

2012年6月30日

環境 Windows 8 Release Preview + Visual Studio 2012 RC

パターン1:

http://www.youtube.com/watch?v=QN6FxatiLEU&feature=youtube_gdata

これは、WebView で、表示できる。また、ie10、メトロスタイルブラウザーでも表示できる。

パターン2:

http://www.youtube.com/v/QN6FxatiLEU

これだと、ie10では表示できるが、WebView 、メトロスタイルブラウザーでは、真っ白になって表示できません。orz

パターン2は、おそらく直接Flash を開こうとするためではないかと思いますが、原因、回避策は現時点でわかりません。

YouTube で HTML5 を有効に設定する方法はこちら

http://www.youtube.com/html5

広告

Windows 8 でブラウザーを起動する

2012年6月28日

Windows RT でだいぶ変わってしまったので、どうすればいいのか、戸惑いますね。

async void ItemView_ItemClick(object sender, ItemClickEventArgs e)
{           
    var itemId = ((RssDataItem)e.ClickedItem).Content;
    await Windows.System.Launcher.LaunchUriAsync(new Uri(itemId));
}

ObservableSyndicationCollection

2012年6月24日

 

Syndication.cs

using System;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using Windows.Web.Syndication;

namespace uchukamen
{
    public class ObservableSyndicationCollection : ObservableCollection<SyndicationItem>
    {

        public async Task Get(string urlStr)
        {
            SyndicationClient client = new SyndicationClient();
            client.BypassCacheOnRetrieve = true;

            // Although most HTTP servers do not require User-Agent header, others will reject the request or return
            // a different response if this header is missing. Use SetRequestHeader() to add custom headers.
            client.SetRequestHeader(“User-Agent”, “Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)”);

            Uri uri = new Uri(urlStr);

            SyndicationFeed currentFeed = await client.RetrieveFeedAsync(uri);

            foreach (SyndicationItem item in currentFeed.Items)
            {
                this.Add(item);
            }
        }
    }
}

C# でバインド

uchukamen.ObservableSyndicationCollection synd = new uchukamen.ObservableSyndicationCollection();
await synd.Get(“”);
this.itemGridView.ItemsSource = synd;


 

SyndicationItem とニュースのサポート状況

2012年6月23日

 

  Google RSS Yahoo 朝日 毎日 読売
Title
PublishedDate date date
Links
Id
Categories subject subject
Summary description description

//     atom:title 要素。
public ISyndicationText Title

//     atom:entry の下の atom:published 要素、または RSS 2.0 の item 要素の下の pubDate 要素。
public DateTimeOffset PublishedDate

//     atom:entry 下のすべての atom:link 要素のコレクション。
public IList<SyndicationLink> Links

//     atom:Id 要素または RSS 2.0 の guid 要素。
public string Id

//     フィードのカテゴリのコレクションを取得します。このプロパティは、atom:feed 内の atom:category 要素のすべてのコレクションを表します。
public IList<SyndicationCategory> Categories

//     atom:summary 要素または RSS 2.0 の description 要素。
public ISyndicationText Summary

// ———————————————————-

//     atom:entry 下のすべての atom:author 要素のコレクション。
public IList<SyndicationPerson> Authors

//     この項目に関するコメントの URI (Uniform Resource Identifier) を取得または設定します。このプロパティは、/rss/channel/item/comments要素を表します。
public Uri CommentsUri

//     項目の内容を取得または設定します。
public SyndicationContent Content

//     atom:feed 下のすべての atom:contributor 要素のコレクション。
public IList<SyndicationPerson> Contributors

//     rel=”edit-media” 属性を持つ atom:link 要素。
public Uri EditMediaUri

//     rel=”edit” 属性を持つ atom:link 要素。
public Uri EditUri

//     要素内の子要素のリスト。
public IList<ISyndicationNode> ElementExtensions

//     ETag HTTP ヘッダーです。
public string ETag

//     項目の URI です。
public Uri ItemUri

//     要素の xml:lang 属性
public string Language

//     atom:updated 要素。
public DateTimeOffset LastUpdatedTime

//     要素のローカル名。それは XML 1.0 に従って有効である必要があります。
public string NodeName

//     要素の名前空間。
public string NodeNamespace

//     要素のテキスト コンテンツ。
public string NodeValue

//     atom:rights 要素。
public ISyndicationText Rights

//     atom:source 要素または RSS 2.0 の source 要素。
public SyndicationFeed Source

News RSS関連

2012年6月23日

ニュースRSS一覧

Source Type Topic URL例
Google RSS 2.0   http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss
Google Atom 1.0   http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=atom
Yahoo RSS 2.0 トピックトップ http://rss.dailynews.yahoo.co.jp/fc/rss.xml
朝日新聞 RDF 朝日新聞デジタル速報ニュース http://rss.asahi.com/rss/asahi/newsheadlines.rdf
毎日新聞 RDF 毎日jp-ニュース速報(総合) http://rss.rssad.jp/rss/mainichi/flash.rss
読売 RSS 2.0 YOMIURI ONLINE(読売新聞)主要ニュース http://rss.yomiuri.co.jp/rss/yol/topstories

Twitterizer

2012年6月17日

Twitterizer を使うと簡単ですね。

次は、アプリケーションでの例です。Web は少し違うので注意。

using Twitterizer;

string consumerKey = “…”;
string consumerSecret = “…”;
Twitterizer.OAuthTokenResponse reqToken = null;

認証

reqToken = Twitterizer.OAuthUtility.GetRequestToken(consumerKey, consumerSecret, “oob”);
Uri uri = Twitterizer.OAuthUtility.BuildAuthorizationUri(reqToken.Token);
System.Diagnostics.Process.Start(uri.ToString());

ユーザー情報

string name= “…”;

TwitterResponse<TwitterUser> userResp = TwitterUser.Show(name);
TwitterUser user = userResp.ResponseObject;
string  screenName = String.Format(“ScreenName: {0:s}\r\n”, user.ScreenName);
string userId = String.Format(“ID: {0:d}\r\n”, (int)user.Id);

サーチ

string searchText = “…”;

TwitterResponse<TwitterSearchResultCollection> ret
= TwitterSearch.Search(searchText);
          TwitterSearchResultCollection results = ret.ResponseObject;

          for (int i = 0; i < results.Count; i++)
          {
              string msg = results[i].Text;
              msg += “\r\n”;
              msg += “UserID : ” + results[i].FromUserId + “\r\n”;
              msg += “—–\r\n”;
          }

 

Twitterizer の非同期のコードサンプル

2012年6月17日

Code Camp 2011Twitterizer-TLHCodeCamp2011.zip のサンプルより。

using Twitterizer;

OAuthTokens tokens = new OAuthTokens()
{
    ConsumerKey = “…”,
    ConsumerSecret = “…”,
    AccessToken = “…”,
    AccessTokenSecret = “…”
};

TimelineOptions options = new TimelineOptions();
options.Count = 200;

IAsyncResult asyncResult = TwitterTimelineAsync.HomeTimeline(tokens, options, new TimeSpan(0, 1, 0), res =>
    {
        if (res.Result != RequestResult.Success)
        {
            BeginInvoke(new Action(() =>
            {
                MessageBox.Show(…);
            }));

            return;
        }

        BeginInvoke(new Action(() =>
            {
                this.TimelineGridView.DataSource = res.ResponseObject;
            }));
    });

DataTemplate とStaticResource のBind

2012年6月16日

環境: Windows 8 Release Preview Build 8400 + Visual Studio 2012 RC

image

詳細は、DataTemplate class を参照してください。

<Grid Style=”{StaticResource LayoutRootStyle}”>
    <Grid.Resources>
        <src:Customers x:Key=”customers”/>
        <DataTemplate x:Key=”MyDataTemplate“>
            <Grid HorizontalAlignment=”Left” Width=”250″ Height=”150″>
                <Border Background=”{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}”>
                    <Image Source=”{Binding Image}” Stretch=”UniformToFill”/>
                </Border>
                <StackPanel VerticalAlignment=”Bottom” Background=”{StaticResource ListViewItemOverlayBackgroundThemeBrush}”>
                    <TextBlock Text=”{Binding FirstName}” Foreground=”{StaticResource ListViewItemOverlayForegroundThemeBrush}” Style=”{StaticResource TitleTextStyle}” Height=”60″ Margin=”15,0,15,0″/>
                    <TextBlock Text=”{Binding LastName}” Foreground=”{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}” Style=”{StaticResource CaptionTextStyle}” TextWrapping=”NoWrap” Margin=”15,0,15,10″/>
                    <TextBlock Text=”{Binding Address}” Foreground=”{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}” Style=”{StaticResource CaptionTextStyle}” TextWrapping=”NoWrap” Margin=”15,0,15,10″/>
                </StackPanel>
            </Grid>
        </DataTemplate>
    </Grid.Resources>

    <Grid.RowDefinitions>
        <RowDefinition Height=”140″/>
        <RowDefinition Height=”*”/>
    </Grid.RowDefinitions>

    <!– [戻る] ボタンおよびページ タイトル–>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width=”Auto”/>
            <ColumnDefinition Width=”*”/>
        </Grid.ColumnDefinitions>
        <Button x:Name=”backButton” Click=”GoBack” IsEnabled=”{Binding Frame.CanGoBack, ElementName=pageRoot}” Style=”{StaticResource BackButtonStyle}”/>
        <TextBlock x:Name=”pageTitle” Text=”{StaticResource AppName}” Grid.Column=”1″ Style=”{StaticResource PageHeaderTextStyle}”/>
    </Grid>

    <GridView
        x:Name=”itemGridView”
        AutomationProperties.AutomationId=”ItemGridView”
        AutomationProperties.Name=”Grouped Items”
        Margin=”0,137,0,0″
        Padding=”0,0,0,0″
        HorizontalAlignment=”Left”
        Width=”300″
        ItemsSource=”{Binding Source={StaticResource customers}}”
        ItemTemplate=”{StaticResource MyDataTemplate}”
        ScrollViewer.VerticalScrollBarVisibility=”Auto”
        SelectionMode=”None”
        IsItemClickEnabled=”True”
        ItemClick=”ItemView_ItemClick” Grid.RowSpan=”2″>

        <GridView.ItemsPanel>
            <ItemsPanelTemplate>                       
                <VirtualizingStackPanel Orientation=”Vertical”/>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridView.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <Grid Margin=”1,0,0,6″>
                            <Button
                                AutomationProperties.Name=”Group Title”
                                Content=”{Binding Title}”
                                Click=”Header_Click”
                                Style=”{StaticResource TextButtonStyle}”/>
                        </Grid>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <VariableSizedWrapGrid Orientation=”Vertical” Margin=”0,0,80,0″/>
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
            </GroupStyle>
        </GridView.GroupStyle>
    </GridView>


</Grid>

Customers.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace App5
{
    public class Customer
    {
        public String FirstName { get; set; }
        public String LastName { get; set; }
        public String Address { get; set; }

        public Customer(String firstName, String lastName, String address)
        {
            this.FirstName = firstName;
            this.LastName = lastName;
            this.Address = address;
        }
    }

    public class Customers : ObservableCollection<Customer>
    {
        public Customers()
        {
            Add(new Customer(“Michael”, “Anderberg”,
                    “12 North Third Street, Apartment 45”));
            Add(new Customer(“Chris”, “Ashton”,
                    “34 West Fifth Street, Apartment 67”));
            Add(new Customer(“Cassie”, “Hicks”,
                    “56 East Seventh Street, Apartment 89”));
            Add(new Customer(“Guido”, “Pica”,
                    “78 South Ninth Street, Apartment 10”));
            Add(new Customer(“Guido”, “Pica”,
                    “78 South Ninth Street, Apartment 10”));
            Add(new Customer(“Guido”, “Pica”,
                    “78 South Ninth Street, Apartment 10”));
            Add(new Customer(“Guido”, “Pica”,
                    “78 South Ninth Street, Apartment 10”));
            Add(new Customer(“Guido”, “Pica”,
                    “78 South Ninth Street, Apartment 10”));
            Add(new Customer(“Guido”, “Pica”,
                    “78 South Ninth Street, Apartment 10”));
            Add(new Customer(“Guido”, “Pica”,
                    “78 South Ninth Street, Apartment 10”));
        }
    }
}

Standard Templates

2012年6月16日

環境: Windows 8 Release Preview Build 8400 + Visual Studio 2012 RC

標準でStandardStylesに定義されているテンプレートです。

Standard250x250ItemTemplate

image

Standard500x130ItemTemplate

image

Standard130ItemTemplate

image

Standard80ItemTemplate

image

StandardSmallIcon300x70ItemTemplate

image

StandardSmallIcon70ItemTemplate

image

StandardFileWithTooltip190x130ItemTemplate

image

Windows 8 ファイル リソースを読み込む方法

2012年6月16日

環境: Windows 8 Release Preview Build 8400 + Visual Studio 2012 RC

次に説明があります。

ファイル リソースを読み込む方法 (C#/VB/C++ と XAML を使った Metro スタイル アプリ) 

ケース
同じパッケージ内 <Image Source=”images/logo.png” />
同じパッケージ内に格納された、クラス ライブラリからのファイル <Image Source=”/ClassLibraryName/images/logo.png” />
Application State に格納されたファイル <Image Source=”ms-appdata:///local/Relative/File/Path” />
別のパッケージからリソースを読み込む場合 <Image Source=”ms-appx://PackageName/Relative/File/Path” />
ドキュメントと同じスキームを使う場合 <Image Source=”//PackageName/Relative/File/Path” />
識別子から URI スキーム(ms-appx または ms-appx-web)を削除します。
C# コード内からリソースを読み込む場合

var file = Windows.Storage.StorageFile.CreateFromApplicationURIAsync
    (new Windows.Foundation.Uri(“ms-appx://PackageName/Relative/File/Path”));