{"id":752,"date":"2014-02-20T22:19:36","date_gmt":"2014-02-20T21:19:36","guid":{"rendered":"http:\/\/webpiraten.de\/?p=752"},"modified":"2014-02-20T22:25:51","modified_gmt":"2014-02-20T21:25:51","slug":"resolved-twitter-api-image-upload","status":"publish","type":"post","link":"https:\/\/webpiraten.de\/index.php\/frameworks\/resolved-twitter-api-image-upload\/","title":{"rendered":"resolved &#8211; twitter api image upload"},"content":{"rendered":"<p>wer auch per twitter api posts senden will, hat evtl. auch schonmal mit dem gedanken gespielt, images gleich mit hochzuladen.<br \/>\nhier die syntax die tats\u00e4chlich funktioniert. api url ist in allen f\u00e4llen <em>https:\/\/api.twitter.com\/1.1\/<\/em> <\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n    public function updateStatusWithImage($title, $link, $desc, $img)\r\n    {\r\n        if(empty($img))\r\n        {\r\n            return $this-&gt;updateStatus($title, $link, $desc);\r\n        }\r\n\r\n        $status = $title.PHP_EOL.PHP_EOL.$link;\r\n        $params = array( \r\n           'media&#x5B;]' =&gt; '@'.$img,\r\n           'status'   =&gt; $status\r\n        );\r\n\r\n        return $this-&gt;send('statuses\/update_with_media.json', 'POST', $params);\r\n    }\r\n<\/pre>\n<p>der vollst\u00e4ndigkeit halber die ganze klasse (kohana style)<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n&lt;?php defined('SYSPATH') OR die('No direct script access.');\r\n\r\nclass Gtwitter\r\n{\r\n    protected $api_url;\r\n    protected $oauth_access_token;\r\n    protected $oauth_access_token_secret;\r\n    protected $consumer_key;\r\n    protected $consumer_secret;\r\n\r\n    public function __construct()\r\n    {\r\n        $twitter_config                     = Kohana::$config-&gt;load('gtwitter');\r\n        $this-&gt;api_url                      = $twitter_config-&gt;get('api_url');\r\n        $this-&gt;oauth_access_token           = $twitter_config-&gt;get('access_token');\r\n        $this-&gt;oauth_access_token_secret    = $twitter_config-&gt;get('access_token_secret');\r\n        $this-&gt;consumer_key                 = $twitter_config-&gt;get('consumer_key');\r\n        $this-&gt;consumer_secret              = $twitter_config-&gt;get('consumer_secret');\r\n    }\r\n\r\n    public function getCredentials()\r\n    {\r\n        return $this-&gt;send('account\/verify_credentials.json');\r\n    }\r\n\r\n    public function getTimeline()\r\n    {\r\n        return $this-&gt;send('statuses\/user_timeline.json');\r\n    }\r\n\r\n    public function getFriends()\r\n    {\r\n        return $this-&gt;send('friends\/list.json');\r\n    }\r\n\r\n    public function getFollowers()\r\n    {\r\n        return $this-&gt;send('followers\/list.json');\r\n    }\r\n\r\n    public function updateStatus($title, $link, $desc)\r\n    {\r\n        $status = $title.PHP_EOL.PHP_EOL.$link;\r\n        return $this-&gt;send('statuses\/update.json', 'POST', array('status' =&gt; $status));\r\n    }\r\n\r\n    public function updateStatusWithImage($title, $link, $desc, $img)\r\n    {\r\n        if(empty($img))\r\n        {\r\n            return $this-&gt;updateStatus($title, $link, $desc);\r\n        }\r\n\r\n        $status = $title.PHP_EOL.PHP_EOL.$link;\r\n        $params = array( \r\n           'media&#x5B;]' =&gt; '@'.$img,\r\n           'status'   =&gt; $status\r\n        );\r\n\r\n        return $this-&gt;send('statuses\/update_with_media.json', 'POST', $params);\r\n    }\r\n\r\n    protected function buildBaseString($base_uri, $method, $params)\r\n    {\r\n        $retval = array();\r\n        ksort($params);\r\n        foreach($params as $key=&gt;$value)\r\n        {\r\n            $retval&#x5B;] = $key . '=' . rawurlencode($value);\r\n        }\r\n        return $method . '&amp;' . rawurlencode($base_uri) . '&amp;' . rawurlencode(implode('&amp;', $retval));\r\n    }\r\n\r\n    protected function buildAuthorizationHeader($oauth)\r\n    {\r\n        $retval = 'Authorization: OAuth ';\r\n        $values = array();\r\n        foreach($oauth as $key=&gt;$value)\r\n        {\r\n            $values&#x5B;] = $key . '=&quot;' . rawurlencode($value) . '&quot;';\r\n        }\r\n        $retval .= implode(', ', $values);\r\n        return $retval;\r\n    }\r\n\r\n    protected function getOAuth()\r\n    {\r\n        return array(\r\n            'oauth_consumer_key'        =&gt; $this-&gt;consumer_key,\r\n            'oauth_nonce'               =&gt; time(),\r\n            'oauth_signature_method'    =&gt; 'HMAC-SHA1',\r\n            'oauth_token'               =&gt; $this-&gt;oauth_access_token,\r\n            'oauth_timestamp'           =&gt; time(),\r\n            'oauth_version'             =&gt; '1.0'\r\n        );\r\n    }\r\n\r\n    protected function send($url, $method = 'GET', $params = array())\r\n    {\r\n        $url                        = $this-&gt;api_url.$url;\r\n        if($method == 'GET' &amp;&amp; !empty($params))\r\n        {\r\n            $url                    = $url.'?'.http_build_query($params);\r\n        }\r\n        $oauth                      = $this-&gt;getOAuth();\r\n        $base_info                  = $this-&gt;buildBaseString($url, $method, $oauth);\r\n        $composite_key              = rawurlencode($this-&gt;consumer_secret) . '&amp;' . rawurlencode($this-&gt;oauth_access_token_secret);\r\n        $oauth_signature            = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));\r\n        $oauth&#x5B;'oauth_signature']   = $oauth_signature;\r\n\r\n        \/\/ do curl\r\n        $header                         = array($this-&gt;buildAuthorizationHeader($oauth), 'Expect:');\r\n        $opt                            = array();\r\n        $opt&#x5B;CURLOPT_HTTPHEADER]        = $header;\r\n        $opt&#x5B;CURLOPT_HEADER]            = false;\r\n        $opt&#x5B;CURLOPT_URL]               = $url;\r\n        $opt&#x5B;CURLOPT_RETURNTRANSFER]    = true;\r\n        $opt&#x5B;CURLOPT_FOLLOWLOCATION]    = true;\r\n        $opt&#x5B;CURLOPT_SSL_VERIFYPEER]    = false;\r\n        if($method == 'POST')\r\n        {\r\n            $opt&#x5B;CURLOPT_POST]          = true;\r\n            $opt&#x5B;CURLOPT_POSTFIELDS]    = $params;\r\n        }\r\n\r\n        $feed = curl_init();\r\n        curl_setopt_array($feed, $opt);\r\n        $json = curl_exec($feed);\r\n        curl_close($feed);\r\n\r\n        return json_decode($json, true);\r\n    }\r\n\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>wer auch per twitter api posts senden will, hat evtl. auch schonmal mit dem gedanken gespielt, images gleich mit hochzuladen. hier die syntax die tats\u00e4chlich funktioniert. api url ist in allen f\u00e4llen https:\/\/api.twitter.com\/1.1\/ public function updateStatusWithImage($title, $link, $desc, $img) { if(empty($img)) { return $this-&gt;updateStatus($title, $link, $desc); } $status = $title.PHP_EOL.PHP_EOL.$link; $params = array( &#8218;media&#x5B;]&#8216; =&gt; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,26,5,515,516],"tags":[182,518,282,522,520,517,653,181,521,519],"class_list":["post-752","post","type-post","status-publish","format-standard","hentry","category-frameworks","category-kohana-framework","category-php","category-social-media","category-twitter-social-media","tag-api","tag-curl","tag-image","tag-oauth","tag-send","tag-social-media-2","tag-status","tag-twitter","tag-update","tag-upload"],"_links":{"self":[{"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/posts\/752","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/comments?post=752"}],"version-history":[{"count":4,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/posts\/752\/revisions"}],"predecessor-version":[{"id":756,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/posts\/752\/revisions\/756"}],"wp:attachment":[{"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/media?parent=752"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/categories?post=752"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/tags?post=752"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}