‘WebAPI’ カテゴリーのアーカイブ

Google Analytics APIをPHPから使ってページランキングを表示する

2010年7月10日 土曜日

code.google.comからGAPIというライブラリをダウンロードする。

curlのモジュールが有効になっていることが必要。下記はGAPIに付属のサンプルコード。実行するとブラウザごとのページビュー、訪問数をページビューの少ない順に出力する。実行するにはdefine文に定義されているemailアドレス、パスワード、プロファイルIDを実際に使用できる者に変更するに必要がある。プロファイルIDはGoogle Analytics管理画面のトップページでプロファイルの編集を実行して表示した画面の左上に表示されている数字。

<?php
define(‘ga_email’,'youremail@email.com’);
define(‘ga_password’,'your password’);
define(‘ga_profile_id’,'your profile id’);

require ‘gapi.class.php’;

$ga = new gapi(ga_email,ga_password);

$ga->requestReportData(ga_profile_id,array(‘browser’,'browserVersion’),array(‘pageviews’,'visits’));
?>
<table>
<tr>
  <th>Browser &amp; Browser Version</th>
  <th>Pageviews</th>
  <th>Visits</th>
</tr>
<?php
foreach($ga->getResults() as $result):
?>
<tr>
  <td><?php echo $result ?></td>
  <td><?php echo $result->getPageviews() ?></td>
  <td><?php echo $result->getVisits() ?></td>
</tr>
<?php
endforeach
?>
</table>

<table>
<tr>
  <th>Total Results</th>
  <td><?php echo $ga->getTotalResults() ?></td>
</tr>
<tr>
  <th>Total Pageviews</th>
  <td><?php echo $ga->getPageviews() ?>
</tr>
<tr>
  <th>Total Visits</th>
  <td><?php echo $ga->getVisits() ?></td>
</tr>
<tr>
  <th>Results Updated</th>
  <td><?php echo $ga->getUpdated() ?></td>
</tr>
</table>

requestReportDataメソッドのパラメータは

requestReportData($report_id, $dimensions, $metrics, $sort_metric=null, $filter=null, $start_date=null, $end_date=null, $start_index=1, $max_results=30)

となっていて、Google Analytics APIのFeedリクエストで指定できるパラメータが渡せるようになっている。複数指定できるパラメータは配列として渡す。たとえば上位アクセスランキングのリストがほしい場合は上記メソッドを変更して、

$ga->requestReportData(ga_profile_id,array(‘pageTitle’,'pagePath’),array(‘pageviews’,'visits’),
 ’-pageviews’, null, null, null, 1, 10);

とすることで取得できる。

表示部分は

foreach($ga->getResults() as $result):
?>
<tr>
  <td><?php echo $result ?></td>
  <td><?php echo $result->getPageviews() ?></td>
  <td><?php echo $result->getVisits() ?></td>
</tr>
<?php
endforeach
?>

<?php
foreach($ga->getResults() as $result):
?>
<tr>
  <td><a href=’<?php echo $result->getPagepath() ?>’><?php echo $result->getPagetitle() ?></a></td>
  <td><?php echo $result->getPageviews() ?></td>
  <td><?php echo $result->getVisits() ?></td>
</tr>
<?php
endforeach
?>

のように変更する。

WCFを使ってXML-RPC通信を行うには

2010年6月10日 木曜日

Xml-Rpc With WCFから「XML-RPC for WCF」をダウンロード。

上記blogのコメントに従ってXmlRpcDataContractSerializationHelperクラスのDeserializeStructメソッドのループ           

while (reader.NodeType != XmlNodeType.EndElement)
 {

の最後に、下記を追加。(ホワイトスペースと改行(XmlNodeType.Text)をスキップするため)

while (reader.NodeType == XmlNodeType.Whitespace || reader.NodeType == XmlNodeType.Text)
 {
            reader.Skip();
 }

また、Desirializeメソッドでswitch (reader.LocalName)の case XmlRpcProtocol.DateTime:の日付の形式が、dateTime.iso8601の形式(下記例参照)でなかったため修正。

<dateTime.iso8601>19980717T14:08:55</dateTime.iso8601>

また、Desirializeメソッドで<value>の内側に型のタグがない場合stringにする処理がなかったため、メソッドの一番最後に

 else if (reader.NodeType == XmlNodeType.Text)
{
        returnValue = reader.ReadString(); 
}

を追加した。このモジュールの使う手順は下記。

  • 参照にMicrosoft.Samples.XmlRpcを追加。
  • 普通のWCFと同じようにServiceContract, OperationContract属性を追加したインターフェースを定義する。ただし、OperationContractは[OperationContract(Action = "metaWeblog.newPost")]のようにActionにXML-RPCのメソッド名を追加する。また、XML-RPCのstruct型の定義はWCF側ではクラスとして定義し、DataContract, DataMember属性を追加する。
  • Web.configのsystem.serviceModelセクションを下記のように定義する。

<system.serviceModel>
   <extensions>
     <behaviorExtensions>
       <add name=”xmlRpcEndpointBehavior”
            type=”Microsoft.Samples.XmlRpc.XmlRpcEndpointBehaviorSection, Microsoft.Samples.XmlRpc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null” />
     </behaviorExtensions>
   </extensions>
   <services>
     <service behaviorConfiguration=”debugBehavior” name=”実装したクラス名”>
       <host>
       </host>
       <endpoint address=”" behaviorConfiguration=”xmlRpcBehavior” binding=”webHttpBinding”
         contract=”定義したインタフェース名” />
     </service>
   </services>
   <behaviors>
     <endpointBehaviors>
       <behavior name=”xmlRpcBehavior”>
         <xmlRpcEndpointBehavior />
       </behavior>
     </endpointBehaviors>
     <serviceBehaviors>
       <behavior name=”debugBehavior”>
         <serviceMetadata httpGetEnabled=”true” />
         <serviceDebug includeExceptionDetailInFaults=”true” />
       </behavior>
     </serviceBehaviors>
   </behaviors>
   <serviceHostingEnvironment multipleSiteBindingsEnabled=”true” />
 </system.serviceModel>

.Net frameworkのSyndicationFeedクラスを使ってYahoo Media RSS(MRSS)などの拡張フィードを取得するには

2009年11月27日 金曜日

SyndicationFeedに含まれるSyndicationItemのElementExtensionsプロパティを使って取得可能。

たとえば下記のように、サムネールを取得することが可能である。

        private static readonly XNamespace NS_YAHOO_MEDIA_RSS = “http://search.yahoo.com/mrss/“;

        public static string GetThubmnailUri(SyndicationItem item)
        {
            var extensions = item.ElementExtensions.Where<SyndicationElementExtension>(
               obj => obj.OuterNamespace == NS_YAHOO_MEDIA_RSS).ToArray();
            XmlReader reader = extensions[0].GetReader();
            XElement topElem = (XElement)XElement.ReadFrom(reader);
            XElement thumbElem = topElem.Elements(NS_YAHOO_MEDIA_RSS + “thumbnail”).FirstOrDefault();
            if (thumbElem != null)
            {
                XAttribute attr = thumbElem.Attribute(“url”);
                if (attr != null)
                {
                    return attr.Value;
                }
            }
            return string.Empty;
        }

.Net(C#)でRSS, Atomなどのフィードを取得/作成するには

2009年11月27日 金曜日

System.ServiceModel.Syndication.SyndicationFeedクラスを使用する。System.ServiceModel.Web.dll クラスを参照することが必要となる。フィードの取得は下記のように行う。

using (XmlReader reader = XmlReader.Create(“フィードのURI”))
            {
                SyndicationFeed feed = SyndicationFeed.Load(reader);
                SyndicationItem[] itemList = feed.Items.ToArray();
            }

これでitemListにフィードのエントリを格納したSyndicationItemの配列が返される。

フィードの作成にはSyndicationFeed クラスを利用してフィードを作成し、Atom10FeedFormatterクラス を利用してシリアライズするとAtom形式になり、Rss20FeedFormatter クラスを利用してシリアライズするとRSS2.0形式になる。

wordpressで更新pingがうまく通知されないようなので調べてみた。

2008年5月19日 月曜日

wordpress(2.5)で更新pingがうまく飛ばないようなので、サーバ上でwiresharkを使ってパケットダンプして調べてみた。

wordpress 2.5ではweblogUpdates.extendedPing を使っているが、FC2、yahoo、blogranking、livedoorでは対応して無くエラーになるようである。google, technoratiではOKだった。面倒くさいのでしばらく放置。

update pingのサンプル(XML-RPC)

2008年5月19日 月曜日

http://www.xmlrpc.com/weblogsComより、リクエストとレスポンスのサンプル。

POST /RPC2 HTTP/1.0
User-Agent: Radio UserLand/7.1b7 (WinNT)
Host: rpc.weblogs.com
Content-Type: text/xml
Content-length: 250

<?xml version=”1.0″?>
<methodCall>
  <methodName>weblogUpdates.ping</methodName>
    <params>
        <param>
            <value>Scripting News</value>
        </param>
        <param>
             <value>http://www.scripting.com/</value>
        </param>
     </params>
 </methodCall>
 

 

HTTP/1.1 200 OK
Connection: close
Content-Length: 333
Content-Type: text/xml
Date: Sun, 30 Sep 2001 20:02:30 GMT
Server: UserLand Frontier/7.0.1-WinNT

<?xml version=”1.0″?>
<methodResponse>
  <params>
    <param>
        <value>
            <struct>
                <member>
                    <name>flerror</name>
                    <value>
                        <boolean>0</boolean>
                     </value>
                </member>
                <member>
                     <name>message</name>
                     <value>Thanks for the ping.</value>
                 </member>
            </struct>
        </value>
    </param>
  </params>
 </methodResponse>

trackbackの概要 (XML-RPC)

2008年5月18日 日曜日

RESTを使用して行う。
以下はhttp://lowlife.jp/yasusii/stories/8.htmlの要約。

リンク先のURIにHTTP/GETでアクセス
HTML中に
下記のようなRDFが含まれている。

<!– コメントにするのはXHTMLバリデータのエラー回避のため
<rdf:RDF xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”
         xmlns:dc=”http://purl.org/dc/elements/1.1/
         xmlns:trackback=”http://madskills.com/public/xml/rss/module/trackback/“>
<rdf:Description
    rdf:about=”http://www.foo.com/archive.html#foo
    dc:identifier=”http://www.foo.com/archive.html#foo
    dc:title=”Foo Bar”
    trackback:ping=”http://www.foo.com/tb.cgi/5” />
</rdf:RDF>
–>

RESTで下記のリクエストを送信(HTTP/POST) (続きを読む…)