<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
		<id>https://wiki.nonip.net/index.php?action=history&amp;feed=atom&amp;title=Php%2Fzend_framework%2Fzend_oauth%E3%81%A8zend_service_twitter%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9Ftwitter%E6%8A%95%E7%A8%BF</id>
		<title>Php/zend framework/zend oauthとzend service twitterを使ったtwitter投稿 - 変更履歴</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.nonip.net/index.php?action=history&amp;feed=atom&amp;title=Php%2Fzend_framework%2Fzend_oauth%E3%81%A8zend_service_twitter%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9Ftwitter%E6%8A%95%E7%A8%BF"/>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Php/zend_framework/zend_oauth%E3%81%A8zend_service_twitter%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9Ftwitter%E6%8A%95%E7%A8%BF&amp;action=history"/>
		<updated>2026-04-24T18:00:01Z</updated>
		<subtitle>このウィキのこのページに関する変更履歴</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>https://wiki.nonip.net/index.php?title=Php/zend_framework/zend_oauth%E3%81%A8zend_service_twitter%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9Ftwitter%E6%8A%95%E7%A8%BF&amp;diff=18046&amp;oldid=prev</id>
		<title>2023年12月4日 (月) 07:07にAdminによる</title>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Php/zend_framework/zend_oauth%E3%81%A8zend_service_twitter%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9Ftwitter%E6%8A%95%E7%A8%BF&amp;diff=18046&amp;oldid=prev"/>
				<updated>2023-12-04T07:07:05Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;←前の版&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2023年12月4日 (月) 07:07時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;行124:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;行124:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;application/models/OauthConsumerModel.php&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;application/models/OauthConsumerModel.php&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;?php&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/ins&gt;&amp;lt;?php&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;require_once dirname(__FILE__) . '/../models/OauthConsumerModel.php';&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/ins&gt;require_once dirname(__FILE__) . '/../models/OauthConsumerModel.php';&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;require_once dirname(__FILE__) . '/../models/LoginSessionModel.php';&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/ins&gt;require_once dirname(__FILE__) . '/../models/LoginSessionModel.php';&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;require_once dirname(__FILE__) . '/../models/logic/TwitterOauthCallBackLogic.php';&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/ins&gt;require_once dirname(__FILE__) . '/../models/logic/TwitterOauthCallBackLogic.php';&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; /**&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; /**&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; * Oauth認証コントローラー&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; * Oauth認証コントローラー&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; */&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; */&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;class OauthController extends Zend_Controller_Action&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/ins&gt;class OauthController extends Zend_Controller_Action&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/ins&gt;{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; private $_oauth;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; private $_oauth;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; private $_config;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; private $_config;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;行178:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;行178:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; echo 'clearしました';&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; echo 'clearしました';&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; }&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/ins&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;application/models/OauthTwitterModel.php&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;application/models/OauthTwitterModel.php&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>https://wiki.nonip.net/index.php?title=Php/zend_framework/zend_oauth%E3%81%A8zend_service_twitter%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9Ftwitter%E6%8A%95%E7%A8%BF&amp;diff=673&amp;oldid=prev</id>
		<title>127.0.0.1: ページの作成:「==やっていること== *ログイン認証からtwitter投稿までの一連の処理 *認証時DB保存（botを作りたい際必要、不必要ならTwitterUsersSet...」</title>
		<link rel="alternate" type="text/html" href="https://wiki.nonip.net/index.php?title=Php/zend_framework/zend_oauth%E3%81%A8zend_service_twitter%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9Ftwitter%E6%8A%95%E7%A8%BF&amp;diff=673&amp;oldid=prev"/>
				<updated>2015-05-19T18:15:28Z</updated>
		
		<summary type="html">&lt;p&gt;ページの作成:「==やっていること== *ログイン認証からtwitter投稿までの一連の処理 *認証時DB保存（botを作りたい際必要、不必要ならTwitterUsersSet...」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==やっていること==&lt;br /&gt;
*ログイン認証からtwitter投稿までの一連の処理&lt;br /&gt;
*認証時DB保存（botを作りたい際必要、不必要ならTwitterUsersSetLogicクラスを削除&lt;br /&gt;
*jqueryプラグイン（charCount.js）で文字数表示&lt;br /&gt;
*utf-8で作成&lt;br /&gt;
&lt;br /&gt;
==サンプルコード==&lt;br /&gt;
application/controllers/OauthController.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 require_once dirname(__FILE__) . '/../models/OauthConsumerModel.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../models/LoginSessionModel.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../models/logic/TwitterOauthCallBackLogic.php';&lt;br /&gt;
  /**&lt;br /&gt;
   * Oauth認証コントローラー&lt;br /&gt;
   */&lt;br /&gt;
 class OauthController extends Zend_Controller_Action&lt;br /&gt;
 {&lt;br /&gt;
     private $_oauth;&lt;br /&gt;
     private $_config;&lt;br /&gt;
     function init()&lt;br /&gt;
     {&lt;br /&gt;
         $this-&amp;gt;_config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/twitter.ini', APPLICATION_ENV);&lt;br /&gt;
         $this-&amp;gt;_oauth = new OauthConsumerModel($this-&amp;gt;_config);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     function indexAction()&lt;br /&gt;
     {&lt;br /&gt;
         // レンダー無し設定&lt;br /&gt;
         $this-&amp;gt;_helper-&amp;gt;ViewRenderer-&amp;gt;setNoRender();&lt;br /&gt;
         // AccessTokenリクエスト&lt;br /&gt;
         $this-&amp;gt;_oauth-&amp;gt;requestAccessToken();&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * コールバック&lt;br /&gt;
      */&lt;br /&gt;
     function callbackAction()&lt;br /&gt;
     {&lt;br /&gt;
         // レンダー無し設定&lt;br /&gt;
         $this-&amp;gt;_helper-&amp;gt;ViewRenderer-&amp;gt;setNoRender();&lt;br /&gt;
         // アプリを拒否された時&lt;br /&gt;
         if ($this-&amp;gt;_request-&amp;gt;denied) {&lt;br /&gt;
             $this-&amp;gt;_redirect('/');&lt;br /&gt;
         }&lt;br /&gt;
         // twitterOauthコールバックロジックロード&lt;br /&gt;
         $logic = new TwitterOauthCallBackLogic();&lt;br /&gt;
         $logic-&amp;gt;execLogic($this-&amp;gt;_request);&lt;br /&gt;
         // リダイレクト&lt;br /&gt;
         $this-&amp;gt;_redirect('/twitter/tweet/');&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * 認証クリア&lt;br /&gt;
      */&lt;br /&gt;
     function clearAction()&lt;br /&gt;
     {&lt;br /&gt;
         // レンダー無し設定&lt;br /&gt;
         $this-&amp;gt;_helper-&amp;gt;ViewRenderer-&amp;gt;setNoRender();&lt;br /&gt;
         // ログインセッションロード&lt;br /&gt;
         $session = new LoginSessionModel();&lt;br /&gt;
         // sessionクリア&lt;br /&gt;
         $session-&amp;gt;delTwitter();&lt;br /&gt;
         echo 'clearしました';&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
application/controllers/TwitterController.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 require_once APPLICATION_PATH . '/models/AppException.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../models/logic/TweetLogic.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../models/logic/TwitterFriendshipCreateLogic.php';&lt;br /&gt;
  /**&lt;br /&gt;
   * Twitterコントローラー&lt;br /&gt;
   */&lt;br /&gt;
 class TwitterController extends Zend_Controller_Action&lt;br /&gt;
 {&lt;br /&gt;
     public function init()&lt;br /&gt;
     {&lt;br /&gt;
         /* Initialize action controller here */&lt;br /&gt;
     }&lt;br /&gt;
     public function preDispatch()&lt;br /&gt;
     {&lt;br /&gt;
         // ログインセッション取得&lt;br /&gt;
         $session = new LoginSessionModel();&lt;br /&gt;
         $profile = $session-&amp;gt;getTwitterProfile();&lt;br /&gt;
         // プロフィールが存在しないとき&lt;br /&gt;
         if (!isset($profile['id'])) {&lt;br /&gt;
             // 認証前のため処理できません。&lt;br /&gt;
             throw new AppException(AppException::ERR_TWITTER_OAUTH);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     public function indexAction()&lt;br /&gt;
     {&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * tweetフォーム&lt;br /&gt;
      */&lt;br /&gt;
     public function tweetAction()&lt;br /&gt;
     {&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * tweet実行&lt;br /&gt;
      */&lt;br /&gt;
     public function tweetexecAction()&lt;br /&gt;
     {&lt;br /&gt;
         // レンダー無し設定&lt;br /&gt;
         $this-&amp;gt;_helper-&amp;gt;ViewRenderer-&amp;gt;setNoRender();&lt;br /&gt;
         // tweetロジックロード&lt;br /&gt;
         $logic = new TweetLogic();&lt;br /&gt;
         $ret = $logic-&amp;gt;execLogic($this-&amp;gt;_request-&amp;gt;tweet);&lt;br /&gt;
         echo '投稿完了';&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * twitterFollorget実行&lt;br /&gt;
      */&lt;br /&gt;
     public function followAction()&lt;br /&gt;
     {&lt;br /&gt;
         // レンダー無し設定&lt;br /&gt;
         $this-&amp;gt;_helper-&amp;gt;ViewRenderer-&amp;gt;setNoRender();&lt;br /&gt;
         // tweetロジックロード&lt;br /&gt;
         $logic = new TwitterFriendshipCreateLogic();&lt;br /&gt;
         $ret = $logic-&amp;gt;execLogic('test');&lt;br /&gt;
         echo '投稿完了';&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
application/models/OauthConsumerModel.php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require_once dirname(__FILE__) . '/../models/OauthConsumerModel.php';&lt;br /&gt;
require_once dirname(__FILE__) . '/../models/LoginSessionModel.php';&lt;br /&gt;
require_once dirname(__FILE__) . '/../models/logic/TwitterOauthCallBackLogic.php';&lt;br /&gt;
 /**&lt;br /&gt;
  * Oauth認証コントローラー&lt;br /&gt;
  */&lt;br /&gt;
class OauthController extends Zend_Controller_Action&lt;br /&gt;
{&lt;br /&gt;
    private $_oauth;&lt;br /&gt;
    private $_config;&lt;br /&gt;
    function init()&lt;br /&gt;
    {&lt;br /&gt;
        $this-&amp;gt;_config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/twitter.ini', APPLICATION_ENV);&lt;br /&gt;
        $this-&amp;gt;_oauth = new OauthConsumerModel($this-&amp;gt;_config);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function indexAction()&lt;br /&gt;
    {&lt;br /&gt;
        // レンダー無し設定&lt;br /&gt;
        $this-&amp;gt;_helper-&amp;gt;ViewRenderer-&amp;gt;setNoRender();&lt;br /&gt;
        // AccessTokenリクエスト&lt;br /&gt;
        $this-&amp;gt;_oauth-&amp;gt;requestAccessToken();&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * コールバック&lt;br /&gt;
     */&lt;br /&gt;
    function callbackAction()&lt;br /&gt;
    {&lt;br /&gt;
        // レンダー無し設定&lt;br /&gt;
        $this-&amp;gt;_helper-&amp;gt;ViewRenderer-&amp;gt;setNoRender();&lt;br /&gt;
        // アプリを拒否された時&lt;br /&gt;
        if ($this-&amp;gt;_request-&amp;gt;denied) {&lt;br /&gt;
            $this-&amp;gt;_redirect('/');&lt;br /&gt;
        }&lt;br /&gt;
        // twitterOauthコールバックロジックロード&lt;br /&gt;
        $logic = new TwitterOauthCallBackLogic();&lt;br /&gt;
        $logic-&amp;gt;execLogic($this-&amp;gt;_request);&lt;br /&gt;
        // リダイレクト&lt;br /&gt;
        $this-&amp;gt;_redirect('/twitter/tweet/');&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * 認証クリア&lt;br /&gt;
     */&lt;br /&gt;
    function clearAction()&lt;br /&gt;
    {&lt;br /&gt;
        // レンダー無し設定&lt;br /&gt;
        $this-&amp;gt;_helper-&amp;gt;ViewRenderer-&amp;gt;setNoRender();&lt;br /&gt;
        // ログインセッションロード&lt;br /&gt;
        $session = new LoginSessionModel();&lt;br /&gt;
        // sessionクリア&lt;br /&gt;
        $session-&amp;gt;delTwitter();&lt;br /&gt;
        echo 'clearしました';&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
application/models/OauthTwitterModel.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 require_once 'Zend/Service/Twitter.php';&lt;br /&gt;
 require_once 'Zend/Oauth/Token/Access.php';&lt;br /&gt;
 /**&lt;br /&gt;
  * Oauth認証Twitterモデルクラス&lt;br /&gt;
  */&lt;br /&gt;
 class OauthTwitterModel extends Zend_Service_Twitter&lt;br /&gt;
 {&lt;br /&gt;
     public function __construct(Zend_Oauth_Token_Access $token, array $config)&lt;br /&gt;
     {&lt;br /&gt;
         self::setHttpClient($token-&amp;gt;getHttpClient($config));&lt;br /&gt;
         parent::__construct(null);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
application/models/LoginSessionModel.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 require_once APPLICATION_PATH . '/utils/XmlToArrayUtil.php';&lt;br /&gt;
 /**&lt;br /&gt;
  * ログインセッションモデルクラス&lt;br /&gt;
  */&lt;br /&gt;
 class LoginSessionModel&lt;br /&gt;
 {&lt;br /&gt;
     const DEFAULT_NAMESPACE = __CLASS__;&lt;br /&gt;
     &lt;br /&gt;
     private $_session;&lt;br /&gt;
     &lt;br /&gt;
     function __construct($namespace = self::DEFAULT_NAMESPACE)&lt;br /&gt;
     {&lt;br /&gt;
         $this-&amp;gt;_session = new Zend_Session_Namespace($namespace);&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * twitterプロフィール設定(XML&lt;br /&gt;
      * &lt;br /&gt;
      * @see http://apiwiki.twitter.com/w/page/22554685/Twitter-REST-API-Method:-account%C2%A0update_profile&lt;br /&gt;
      */&lt;br /&gt;
     public function setTwitterProfileXmlElement($xmlElement)&lt;br /&gt;
     {&lt;br /&gt;
         // xmlElementからArray変換ユーティリティロード&lt;br /&gt;
         $util = new XmlToArrayUtil;&lt;br /&gt;
         $obj = $util-&amp;gt;exec($xmlElement);&lt;br /&gt;
         $this-&amp;gt;_session-&amp;gt;twitterProfile = serialize($obj);&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * twitterプロフィール設定&lt;br /&gt;
      */&lt;br /&gt;
     public function setTwitterProfile($data)&lt;br /&gt;
     {&lt;br /&gt;
         $this-&amp;gt;_session-&amp;gt;twitterProfile = serialize($data);&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * twitterプロフィール取得&lt;br /&gt;
      */&lt;br /&gt;
     public function getTwitterProfile()&lt;br /&gt;
     {&lt;br /&gt;
         if (!isset($this-&amp;gt;_session-&amp;gt;twitterProfile)) {&lt;br /&gt;
             return array();&lt;br /&gt;
         }&lt;br /&gt;
         return unserialize($this-&amp;gt;_session-&amp;gt;twitterProfile);&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * twitterトークン設定(Element&lt;br /&gt;
      */&lt;br /&gt;
     public function setTwitterTokenElement($element)&lt;br /&gt;
     {&lt;br /&gt;
         // 連想配列生成&lt;br /&gt;
         $obj = array(&lt;br /&gt;
             'oauth_token' =&amp;gt; $element-&amp;gt;oauth_token,&lt;br /&gt;
             'oauth_token_secret' =&amp;gt; $element-&amp;gt;oauth_token_secret,&lt;br /&gt;
             'screen_name' =&amp;gt; $element-&amp;gt;screen_name,&lt;br /&gt;
             'user_id' =&amp;gt; $element-&amp;gt;user_id,&lt;br /&gt;
         );&lt;br /&gt;
         $this-&amp;gt;setTwitterToken($obj);&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * twitterトークン設定&lt;br /&gt;
      */&lt;br /&gt;
     public function setTwitterToken($data)&lt;br /&gt;
     {&lt;br /&gt;
         $this-&amp;gt;_session-&amp;gt;twitterToken = serialize($data);&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * twitterトークン取得&lt;br /&gt;
      */&lt;br /&gt;
     public function getTwitterToken()&lt;br /&gt;
     {&lt;br /&gt;
         if (!isset($this-&amp;gt;_session-&amp;gt;twitterToken)) {&lt;br /&gt;
             return array();&lt;br /&gt;
         }&lt;br /&gt;
         return unserialize($this-&amp;gt;_session-&amp;gt;twitterToken);&lt;br /&gt;
     }&lt;br /&gt;
     /**&lt;br /&gt;
      * セッション削除&lt;br /&gt;
      */&lt;br /&gt;
     public function delTwitter()&lt;br /&gt;
     {&lt;br /&gt;
         // twitterプロフィールセッションを削除&lt;br /&gt;
         unset($this-&amp;gt;_session-&amp;gt;twitterProfile);&lt;br /&gt;
         // twitterトークンセッションを削除&lt;br /&gt;
         unset($this-&amp;gt;_session-&amp;gt;twitterToken);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
application/models/logic/TwitterOauthCallBackLogic.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 require_once APPLICATION_PATH . '/models/AppException.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../OauthConsumerModel.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../OauthTwitterModel.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../LoginSessionModel.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/TwitterUserDbSetLogic.php';&lt;br /&gt;
 /**&lt;br /&gt;
  * TwitterOauth認証後のコールバックロジック&lt;br /&gt;
  */&lt;br /&gt;
 class TwitterOauthCallBackLogic&lt;br /&gt;
 {&lt;br /&gt;
     /**&lt;br /&gt;
      * 実行&lt;br /&gt;
      */&lt;br /&gt;
     public function execLogic($request)&lt;br /&gt;
     {&lt;br /&gt;
         // アプリを拒否された時&lt;br /&gt;
         if ($request-&amp;gt;denied) {&lt;br /&gt;
             return false;&lt;br /&gt;
         }&lt;br /&gt;
         $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/twitter.ini', APPLICATION_ENV);&lt;br /&gt;
         $oauth = new OauthConsumerModel($config);&lt;br /&gt;
         &lt;br /&gt;
         // AccessToken取得&lt;br /&gt;
         $token = $oauth-&amp;gt;getAccessToken($request);&lt;br /&gt;
         if (!isset($token)) {&lt;br /&gt;
             // アクセストークン取得に失敗しました。&lt;br /&gt;
             throw new AppException(AppException::ERR_TWITTER_ACCESS_TOKEN_GET);&lt;br /&gt;
         }&lt;br /&gt;
         // OauthTwitter生成&lt;br /&gt;
         $twitter = new OauthTwitterModel($token, $config-&amp;gt;toArray());&lt;br /&gt;
         // プロフィール取得&lt;br /&gt;
         $profile = $twitter-&amp;gt;account-&amp;gt;verifyCredentials();&lt;br /&gt;
         &lt;br /&gt;
         // プロフィールが存在しない時&lt;br /&gt;
         if (!isset($profile-&amp;gt;user)) {&lt;br /&gt;
             // プロフィール取得に失敗しました。&lt;br /&gt;
             throw new AppException(AppException::ERR_TWITTER_PROFILE_GET, $profile-&amp;gt;error);&lt;br /&gt;
         }&lt;br /&gt;
         // *Sessionを使う場合&lt;br /&gt;
         // ログインセッションロード&lt;br /&gt;
         $session = new LoginSessionModel();&lt;br /&gt;
         // twitterトークン(Element)を設定&lt;br /&gt;
         $session-&amp;gt;setTwitterTokenElement($token);&lt;br /&gt;
         &lt;br /&gt;
         // *DBを使う場合&lt;br /&gt;
         // twitterユーザをDBに設定&lt;br /&gt;
         $logic = new TwitterUserDbSetLogic();&lt;br /&gt;
         $logic-&amp;gt;execLogic($token, $profile-&amp;gt;getIterator());&lt;br /&gt;
         &lt;br /&gt;
         // ログインセッションロード&lt;br /&gt;
         $session = new LoginSessionModel();&lt;br /&gt;
         // twitterプロフィール(SimpleXMLElement)を設定&lt;br /&gt;
         $session-&amp;gt;setTwitterProfileXmlElement($profile-&amp;gt;getIterator());&lt;br /&gt;
         &lt;br /&gt;
         return true;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
application/models/logic/TweetLogic.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 require_once APPLICATION_PATH . '/models/AppException.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../OauthTwitterModel.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../dao/TwitterUsersDao.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../LoginSessionModel.php';&lt;br /&gt;
 /**&lt;br /&gt;
  * twitter投稿ロジック&lt;br /&gt;
  */&lt;br /&gt;
 class TweetLogic&lt;br /&gt;
 {&lt;br /&gt;
     /**&lt;br /&gt;
      * 実行&lt;br /&gt;
      */&lt;br /&gt;
     public function execLogic($text)&lt;br /&gt;
     {&lt;br /&gt;
         // twitter設定取得&lt;br /&gt;
         $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/twitter.ini', APPLICATION_ENV, true);&lt;br /&gt;
         &lt;br /&gt;
         // ログインセッション取得&lt;br /&gt;
         $session = new LoginSessionModel();&lt;br /&gt;
         &lt;br /&gt;
         // *Sessionを使う場合&lt;br /&gt;
         $tokenSession = $session-&amp;gt;getTwitterToken();&lt;br /&gt;
         // ZendAccessTokenロード&lt;br /&gt;
         $token = new Zend_Oauth_Token_Access();&lt;br /&gt;
         $token-&amp;gt;setToken($tokenSession['oauth_token']);&lt;br /&gt;
         $token-&amp;gt;setTokenSecret($tokenSession['oauth_token_secret']);&lt;br /&gt;
         &lt;br /&gt;
         // *DBを使う場合&lt;br /&gt;
         // $profile = $loginSession-&amp;gt;getTwitterProfile();&lt;br /&gt;
         // // twitterユーザDaoロード&lt;br /&gt;
         // $dao = new TwitterUsersDao();&lt;br /&gt;
         // $twitterUser = $dao-&amp;gt;findRowByUserId($profile['id']);&lt;br /&gt;
         // // ZendAccessTokenロード&lt;br /&gt;
         // $token = new Zend_Oauth_Token_Access();&lt;br /&gt;
         // $token-&amp;gt;setToken($twitterUser-&amp;gt;oauth_token);&lt;br /&gt;
         // $token-&amp;gt;setTokenSecret($twitterUser-&amp;gt;oauth_token_secret);&lt;br /&gt;
         &lt;br /&gt;
         // AccessToken設定&lt;br /&gt;
         $config-&amp;gt;accessToken = $token;&lt;br /&gt;
         // Oauth認証Twitterモデルロード&lt;br /&gt;
         $twitter = new OauthTwitterModel($token, $config-&amp;gt;toArray());&lt;br /&gt;
         // twitter投稿&lt;br /&gt;
         $response = $twitter-&amp;gt;status-&amp;gt;update($text);&lt;br /&gt;
         if (isset($response-&amp;gt;error)) {&lt;br /&gt;
             // tweetに失敗しました。&lt;br /&gt;
             throw new AppException(AppException::ERR_TWITTER_TWEET, $response-&amp;gt;error);&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
application/models/logic/TwitterUserDbSetLogic.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 require_once dirname(__FILE__) . '/../dao/TwitterUsersDao.php';&lt;br /&gt;
 /**&lt;br /&gt;
  * twitterユーザDB設定ロジック&lt;br /&gt;
  */&lt;br /&gt;
 class TwitterUserDbSetLogic&lt;br /&gt;
 {&lt;br /&gt;
     /**&lt;br /&gt;
      * 実行&lt;br /&gt;
      */&lt;br /&gt;
     public function execLogic($token, $profile)&lt;br /&gt;
     {&lt;br /&gt;
         // データないときは戻る&lt;br /&gt;
         if (is_null($token-&amp;gt;user_id)) return;&lt;br /&gt;
         // TwitterユーザDaoロード&lt;br /&gt;
         $dao = new TwitterUsersDao();&lt;br /&gt;
         // twitterユーザ取得&lt;br /&gt;
         $twitterUser = $dao-&amp;gt;findRowByUserId($token-&amp;gt;user_id);&lt;br /&gt;
         &lt;br /&gt;
         // 既に登録済みのときは&lt;br /&gt;
         if ($twitterUser-&amp;gt;user_id) {&lt;br /&gt;
             // データ更新&lt;br /&gt;
             $data = array(&lt;br /&gt;
                 'oauth_token' =&amp;gt; $token-&amp;gt;oauth_token,&lt;br /&gt;
                 'oauth_token_secret' =&amp;gt; $token-&amp;gt;oauth_token_secret,&lt;br /&gt;
                 'screen_name' =&amp;gt; $token-&amp;gt;screen_name,&lt;br /&gt;
                 'name' =&amp;gt; $profile-&amp;gt;name,&lt;br /&gt;
             );&lt;br /&gt;
             $dao-&amp;gt;updateByUserId($data, $token-&amp;gt;user_id);&lt;br /&gt;
         } else {&lt;br /&gt;
             // データ挿入&lt;br /&gt;
             $data = array(&lt;br /&gt;
                 'user_id' =&amp;gt; $token-&amp;gt;user_id,&lt;br /&gt;
                 'oauth_token' =&amp;gt; $token-&amp;gt;oauth_token,&lt;br /&gt;
                 'oauth_token_secret' =&amp;gt; $token-&amp;gt;oauth_token_secret,&lt;br /&gt;
                 'screen_name' =&amp;gt; $token-&amp;gt;screen_name,&lt;br /&gt;
                 'name' =&amp;gt; $profile-&amp;gt;name,&lt;br /&gt;
             );&lt;br /&gt;
             $dao-&amp;gt;insert($data);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
application/models/AppException.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 /**&lt;br /&gt;
  * アプリエラークラス&lt;br /&gt;
  */&lt;br /&gt;
 class AppException extends Zend_Exception&lt;br /&gt;
 {&lt;br /&gt;
     // エラーコード定数&lt;br /&gt;
     const ERR_TWITTER_ACCESS_TOKEN_GET              = 20001;     // アクセストークン取得に失敗しました。&lt;br /&gt;
     const ERR_TWITTER_PROFILE_GET                   = 20002;     // プロフィール取得に失敗しました。&lt;br /&gt;
     const ERR_TWITTER_OAUTH                         = 20003;     // 認証前のため処理できません。&lt;br /&gt;
     const ERR_TWITTER_TWEET                         = 20101;     // tweetに失敗しました。&lt;br /&gt;
     &lt;br /&gt;
     /**&lt;br /&gt;
      * constructor&lt;br /&gt;
      */&lt;br /&gt;
     public function __construct($errCode, $addMessage = '')&lt;br /&gt;
     {&lt;br /&gt;
         switch ($errCode)&lt;br /&gt;
         {&lt;br /&gt;
             case self::ERR_TWITTER_ACCESS_TOKEN_GET:&lt;br /&gt;
                 $errMessage = 'アクセストークン取得に失敗しました。';&lt;br /&gt;
                 break;&lt;br /&gt;
             case self::ERR_TWITTER_PROFILE_GET:&lt;br /&gt;
                 $errMessage = 'プロフィール取得に失敗しました。';&lt;br /&gt;
                 break;&lt;br /&gt;
             case self::ERR_TWITTER_OAUTH:&lt;br /&gt;
                 $errMessage = '認証前のため処理できません。';&lt;br /&gt;
                 break;&lt;br /&gt;
             case self::ERR_TWITTER_TWEET:&lt;br /&gt;
                 $errMessage = 'tweetに失敗しました。';&lt;br /&gt;
                 break;&lt;br /&gt;
             default:&lt;br /&gt;
                 $errMessage = 'システムエラー';&lt;br /&gt;
         }&lt;br /&gt;
         $errMessage = 'Error:' . $errCode . ' ' . $errMessage;&lt;br /&gt;
         parent::__construct($errMessage . $addMessage, $errCode);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
application/models/dao/TwitterUsersDao.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 /**&lt;br /&gt;
  * twitterユーザDao&lt;br /&gt;
  */&lt;br /&gt;
 class TwitterUsersDao extends Zend_Db_Table_Abstract&lt;br /&gt;
 {&lt;br /&gt;
     // テーブル名&lt;br /&gt;
     protected $_name = 'twitter_users';&lt;br /&gt;
     // ユニークキー&lt;br /&gt;
     protected $_primary = 'id';&lt;br /&gt;
     &lt;br /&gt;
     // 挿入&lt;br /&gt;
     public function insert($data)&lt;br /&gt;
     {&lt;br /&gt;
         $data['created'] = date('Y-m-d H:i:s', time());&lt;br /&gt;
         $data['updated'] = date('Y-m-d H:i:s', time());&lt;br /&gt;
         parent::insert($data);&lt;br /&gt;
     }&lt;br /&gt;
     // 更新(by UserId&lt;br /&gt;
     public function update($data, $where)&lt;br /&gt;
     {&lt;br /&gt;
         $data['updated'] = date('Y-m-d H:i:s', time());&lt;br /&gt;
         parent::update($data, $where);&lt;br /&gt;
         &lt;br /&gt;
     }&lt;br /&gt;
     // 更新(by UserId&lt;br /&gt;
     public function updateByUserId($data, $userId)&lt;br /&gt;
     {&lt;br /&gt;
         $where = $this-&amp;gt;getAdapter()-&amp;gt;quoteInto('user_id = ?', $userId);&lt;br /&gt;
         $this-&amp;gt;update($data, $where);&lt;br /&gt;
     }&lt;br /&gt;
     // レコード取得(by UserId&lt;br /&gt;
     public function findRowByUserId($userId)&lt;br /&gt;
     {&lt;br /&gt;
         $where = $this-&amp;gt;getAdapter()-&amp;gt;quoteInto('user_id = ?', $userId);&lt;br /&gt;
         return $this-&amp;gt;fetchRow($where);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
application/utils/XmlToArrayUtil.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 /**&lt;br /&gt;
  * xmlElementをArrayへ変換ユーティリティ&lt;br /&gt;
  */&lt;br /&gt;
 class XmlToArrayUtil&lt;br /&gt;
 {&lt;br /&gt;
     public function exec($xmlobj)&lt;br /&gt;
     {&lt;br /&gt;
         $arr = array();&lt;br /&gt;
         if (is_object($xmlobj)) {&lt;br /&gt;
             $xml = get_object_vars($xmlobj);&lt;br /&gt;
         } else {&lt;br /&gt;
             $xml = $xmlobj;&lt;br /&gt;
         }&lt;br /&gt;
         foreach ($xml as $key =&amp;gt; $val) {&lt;br /&gt;
             if (is_object($val)) {&lt;br /&gt;
                 $arr[$key] = self::exec($xmlobj-&amp;gt;{$key});&lt;br /&gt;
             } else {&lt;br /&gt;
                 $arr[$key] = $val;&lt;br /&gt;
                 $attrs = get_object_vars($xmlobj-&amp;gt;{$key});&lt;br /&gt;
                 if (isset($attrs['@attributes'])) {&lt;br /&gt;
                     $attrs = $attrs['@attributes'];&lt;br /&gt;
                     $arr[$key . '_attrs'] = $attrs;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         return $arr;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
application/views/templates/index/index.phtml&lt;br /&gt;
 &amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt;nowiki /&amp;gt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;ja&amp;quot; lang=&amp;quot;ja&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;&amp;lt;nowiki /&amp;gt;head&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;meta http-equiv=&amp;quot;Content-Language&amp;quot; content=&amp;quot;ja&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;meta http-equiv=&amp;quot;Content-Script-Type&amp;quot; content=&amp;quot;text/javascript&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;meta http-equiv=&amp;quot;Content-Style-Type&amp;quot; content=&amp;quot;text/css&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;meta http-equiv=&amp;quot;imagetoolbar&amp;quot; content=&amp;quot;no&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;title&amp;gt;tweet&amp;lt;/title&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;lib/global.css&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;!-- JS --&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;!-- http://cssglobe.com/post/7161/jquery-plugin-simplest-twitterlike-dynamic-character-count-for-textareas --&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/js/jquery/charCount.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
         $(function() {&lt;br /&gt;
             //default usage&lt;br /&gt;
             $(&amp;quot;#tweet&amp;quot;).charCount();&lt;br /&gt;
         });&lt;br /&gt;
         &amp;lt;/script&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;!-- CSS --&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
             /* Character Count styles */    &lt;br /&gt;
             .tweet form {&lt;br /&gt;
                 width:500px;&lt;br /&gt;
             }&lt;br /&gt;
             .tweet label{&lt;br /&gt;
                 display:block;&lt;br /&gt;
                 font-size:12px;&lt;br /&gt;
             }&lt;br /&gt;
             .tweet textarea{&lt;br /&gt;
                 margin:5px 0;&lt;br /&gt;
                 width:490px;&lt;br /&gt;
                 height:60px;&lt;br /&gt;
                 border:2px solid #ccc;&lt;br /&gt;
                 padding:3px;&lt;br /&gt;
                 color:#555;&lt;br /&gt;
             }&lt;br /&gt;
             .tweet form div {&lt;br /&gt;
                 position:relative;&lt;br /&gt;
                 margin:1em 0;&lt;br /&gt;
             }&lt;br /&gt;
             .tweet form .counter{&lt;br /&gt;
                 position:absolute;&lt;br /&gt;
                 right:0;&lt;br /&gt;
                 top:0;&lt;br /&gt;
                 font-size:16px;&lt;br /&gt;
                 font-weight:bold;&lt;br /&gt;
                 color:#ccc;&lt;br /&gt;
             }&lt;br /&gt;
             .tweet form .warning {&lt;br /&gt;
                 color:#600;&lt;br /&gt;
             }    &lt;br /&gt;
             .tweet form .exceeded {&lt;br /&gt;
                 color:#e00;&lt;br /&gt;
             }&lt;br /&gt;
         &amp;lt;/style&amp;gt;&lt;br /&gt;
     &amp;lt;/head&amp;gt;&lt;br /&gt;
     &amp;lt;&amp;lt;nowiki /&amp;gt;body&amp;gt;&lt;br /&gt;
         &amp;lt;&amp;lt;nowiki /&amp;gt;div class=&amp;quot;tweet&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;&amp;lt;nowiki /&amp;gt;form id=&amp;quot;form&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;/twitter/tweetexec&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;&amp;lt;nowiki /&amp;gt;div&amp;gt; &lt;br /&gt;
                     &amp;lt;&amp;lt;nowiki /&amp;gt;label for=&amp;quot;message&amp;quot;&amp;gt;Type your message&amp;lt;/label&amp;gt; &lt;br /&gt;
                     &amp;lt;&amp;lt;nowiki /&amp;gt;textarea id=&amp;quot;tweet&amp;quot; name=&amp;quot;tweet&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;
                     &amp;lt;&amp;lt;nowiki /&amp;gt;input type=&amp;quot;submit&amp;quot; id=&amp;quot;submit&amp;quot; value=&amp;quot;Tweet&amp;quot;/&amp;gt;&lt;br /&gt;
                 &amp;lt;/div&amp;gt;&lt;br /&gt;
             &amp;lt;/form&amp;gt;&lt;br /&gt;
         &amp;lt;/div&amp;gt;&lt;br /&gt;
     &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
application/controller/ErrorController.php&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
  /**&lt;br /&gt;
   * エラーコントローラー&lt;br /&gt;
   */&lt;br /&gt;
 class ErrorController extends Zend_Controller_Action&lt;br /&gt;
 {&lt;br /&gt;
     public function errorAction()&lt;br /&gt;
     {&lt;br /&gt;
         $errors = $this-&amp;gt;_getParam('error_handler');&lt;br /&gt;
         &lt;br /&gt;
         &lt;br /&gt;
         switch ($errors-&amp;gt;type) {&lt;br /&gt;
             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:&lt;br /&gt;
             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:&lt;br /&gt;
             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:&lt;br /&gt;
                 // 404 error -- controller or action not found&lt;br /&gt;
                 $this-&amp;gt;getResponse()-&amp;gt;setHttpResponseCode(404);&lt;br /&gt;
                 $this-&amp;gt;view-&amp;gt;message = 'Page not found';&lt;br /&gt;
                 break;&lt;br /&gt;
             default:&lt;br /&gt;
                 // application error&lt;br /&gt;
                 $this-&amp;gt;getResponse()-&amp;gt;setHttpResponseCode(500);&lt;br /&gt;
                 $this-&amp;gt;view-&amp;gt;message = 'Application error';&lt;br /&gt;
                 break;&lt;br /&gt;
         }&lt;br /&gt;
         // アプリエラー&lt;br /&gt;
         if (get_class($errors-&amp;gt;exception) == 'AppException') {&lt;br /&gt;
             $this-&amp;gt;view-&amp;gt;message = $errors-&amp;gt;exception-&amp;gt;getMessage();&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
         // Log exception, if logger available&lt;br /&gt;
         if ($log = $this-&amp;gt;getLog()) {&lt;br /&gt;
             $log-&amp;gt;crit($this-&amp;gt;view-&amp;gt;message, $errors-&amp;gt;exception);&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
         // conditionally display exceptions&lt;br /&gt;
         if ($this-&amp;gt;getInvokeArg('displayExceptions') == true) {&lt;br /&gt;
             $this-&amp;gt;view-&amp;gt;exception = $errors-&amp;gt;exception;&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
         $this-&amp;gt;view-&amp;gt;request   = $errors-&amp;gt;request;&lt;br /&gt;
     }&lt;br /&gt;
     public function getLog()&lt;br /&gt;
     {&lt;br /&gt;
         $bootstrap = $this-&amp;gt;getInvokeArg('bootstrap');&lt;br /&gt;
         if (!$bootstrap-&amp;gt;hasPluginResource('Log')) {&lt;br /&gt;
             return false;&lt;br /&gt;
         }&lt;br /&gt;
         $log = $bootstrap-&amp;gt;getResource('Log');&lt;br /&gt;
         return $log;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
application/configs/twitter.ini&lt;br /&gt;
 [production]&lt;br /&gt;
 siteUrl = http://twitter.com/oauth&lt;br /&gt;
 callbackUrl = http://twitter.localhost/oauth/callback&lt;br /&gt;
 consumerKey = xxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 consumerSecret = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;
 ; ログイン認証（毎回許可を出さない&lt;br /&gt;
 ; authorizeUrl = http://twitter.com/oauth/authenticate&lt;br /&gt;
 ; ログイン認証（毎回許可画面を出す&lt;br /&gt;
 authorizeUrl = http://twitter.com/oauth/authorize&lt;br /&gt;
 [staging : production]&lt;br /&gt;
 [testing : production]&lt;br /&gt;
 [development : production]&lt;br /&gt;
&lt;br /&gt;
application/configs/db.ini&lt;br /&gt;
 [production]&lt;br /&gt;
 # db設定&lt;br /&gt;
 db.adapter = Pdo_Mysql&lt;br /&gt;
 db.params.host = localhost&lt;br /&gt;
 db.params.dbname = twitter&lt;br /&gt;
 db.params.username = xxxx&lt;br /&gt;
 db.params.password = xxxxxx&lt;br /&gt;
 db.params.charset = UTF8&lt;br /&gt;
 [staging : production]&lt;br /&gt;
 [testing : production]&lt;br /&gt;
 [development : production]&lt;br /&gt;
&lt;br /&gt;
twitter_usersテーブルSQL&lt;br /&gt;
 CREATE TABLE twitter DEFAULT CHARACTER SET utf8;&lt;br /&gt;
 use twitter;&lt;br /&gt;
 DROP TABLE IF EXISTS `twitter_users`;      &lt;br /&gt;
 CREATE TABLE      &lt;br /&gt;
 twitter_users(      &lt;br /&gt;
 `id` int unsigned NOT NULL PRIMARY KEY  auto_increment ,&lt;br /&gt;
 `user_id` int unsigned NOT NULL UNIQUE   ,&lt;br /&gt;
 `updated` datetime NOT NULL  default 0  ,&lt;br /&gt;
 `updated_ip` varchar(15)     ,&lt;br /&gt;
 `updated_host` varchar(127)     ,&lt;br /&gt;
 `created` datetime NOT NULL  default 0  ,&lt;br /&gt;
 `created_ip` varchar(15)     ,&lt;br /&gt;
 `created_host` varchar(127)     ,&lt;br /&gt;
 `oauth_token` varchar(63)     ,&lt;br /&gt;
 `oauth_token_secret` varchar(63)     ,&lt;br /&gt;
 `screen_name` varchar(31)     ,&lt;br /&gt;
 `name` varchar(31)     &lt;br /&gt;
 ) ENGINE=InnoDB;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==参考URL==&lt;br /&gt;
*Zend_Oauthを使ってOAuth認証するチュートリアル（後編）&lt;br /&gt;
http://h2plus.biz/blog/2009/12/15/456/&lt;br /&gt;
*TwitterクライアントのOAuth認証(Zend_Oauth) - シンプルなTwitterクライアントの作成 -&lt;br /&gt;
http://blog3.logosware.com/archives/914&lt;br /&gt;
*Zend_Service_Twitter でBASIC認証からOAuthに切り替える方法&lt;br /&gt;
http://blog.ishinao.net/2010/09/17/3258/&lt;br /&gt;
*XmlToArray&lt;br /&gt;
http://soft.fpso.jp/develop/php/entry_2764.html&lt;br /&gt;
&lt;br /&gt;
=おまけ=&lt;br /&gt;
==フォローリストに友達追加==&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 require_once APPLICATION_PATH . '/models/AppException.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../OauthTwitterModel.php';&lt;br /&gt;
 // require_once dirname(__FILE__) . '/../dao/TwitterUsersDao.php';&lt;br /&gt;
 require_once dirname(__FILE__) . '/../LoginSessionModel.php';&lt;br /&gt;
 /**&lt;br /&gt;
  * twitterフォロー取得ロジック&lt;br /&gt;
  */&lt;br /&gt;
 class TwitterFriendshipCreateLogic&lt;br /&gt;
 {&lt;br /&gt;
     /**&lt;br /&gt;
      * 実行&lt;br /&gt;
      * &lt;br /&gt;
      * @param   twitterId or screenName&lt;br /&gt;
      */&lt;br /&gt;
     public function execLogic($id)&lt;br /&gt;
     {&lt;br /&gt;
         // twitter設定取得&lt;br /&gt;
         $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/twitter.ini', APPLICATION_ENV, true);&lt;br /&gt;
         &lt;br /&gt;
         // ログインセッション取得&lt;br /&gt;
         $session = new LoginSessionModel();&lt;br /&gt;
         $tokenSession = $session-&amp;gt;getTwitterToken();&lt;br /&gt;
         // ZendAccessTokenロード&lt;br /&gt;
         $token = new Zend_Oauth_Token_Access();&lt;br /&gt;
         $token-&amp;gt;setToken($tokenSession['oauth_token']);&lt;br /&gt;
         $token-&amp;gt;setTokenSecret($tokenSession['oauth_token_secret']);&lt;br /&gt;
         &lt;br /&gt;
         // AccessToken設定&lt;br /&gt;
         $config-&amp;gt;accessToken = $token;&lt;br /&gt;
         // Oauth認証Twitterモデルロード&lt;br /&gt;
         $twitter = new OauthTwitterModel($token, $config-&amp;gt;toArray());&lt;br /&gt;
         // twitter投稿&lt;br /&gt;
         $response = $twitter-&amp;gt;friendshipCreate($id);&lt;br /&gt;
         if (isset($response-&amp;gt;error)) {&lt;br /&gt;
             // フロー追加に失敗しました。&lt;br /&gt;
             // throw new AppException(AppException::ERR_TWITTER_FRIENDSHIP_CREATE, $response-&amp;gt;error);&lt;br /&gt;
         }&lt;br /&gt;
         return true;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>127.0.0.1</name></author>	</entry>

	</feed>