Most popular websites like Facebook, Twitter, Dropbox, LinkedIn etc provide an API that allows to retrieve or post data programmatically. API examples come in many programming languages and PHP is usually one of them. In this article we’ll show how easy is to add API calls to your PHPRunner project.
Lets start by adding Twitter posting functionality. We’ll be using a lightweight twitter-php library for this purpose. Similar libraries exist for other languages as well.
1. Setup a developer account with Twitter.
A quote from twitter-php usage page:
Sign in to the http://twitter.com and register an application from the http://dev.twitter.com/apps page. Remember to never reveal your consumer secrets. Click on My Access Token link from the sidebar and retrieve your own access token. Now you have consumer key, consumer secret, access token and access token secret.
2. Download twitter-php files.
Download source code of twitter-php library, download link is at the bottom of the page. Unzip two files from source folder to your project output directory.
3. Adding code to events
Now proceed to Event Editor and add the following code to one of events. In this example we will be posting to Twitter after new record is added to Categories table.
include("twitter.class.php"); $consumerKey="gy5IXcDt...................."; $consumerSecret="D1oVGmT....................."; $accessToken="2914286452-dfe........................"; $accessTokenSecret="kpbE7qsIMGZ......................"; $twitter = new Twitter($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret); $twitter->send('New category was added: '.$values['Category']);
4. Add a new record to Categories table and this is what we see on our Twitter page.
5. Displaying a list of your latest tweets
Add a new ‘PHP code snippet’ where you need the list of tweets to appear and post the following code there. This will display the list of your last 20 tweets. To make it look good we need to add some HTML and CSS.
include("twitter.class.php"); $consumerKey="gy5IXcDt...................."; $consumerSecret="D1oVGmT....................."; $accessToken="2914286452-dfe........................"; $accessTokenSecret="kpbE7qsIMGZ......................"; $twitter = new Twitter($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret); $statuses = $twitter->load(Twitter::ME); echo '';
This is how it looks in PHPRunner project:
6. Instead of displaying your own tweets you can display the results of Twitter search
For this purpose in your code replace
$statuses = $twitter->load(Twitter::ME);
with
$statuses = $twitter->search('Christmas sale');
You might want to remove ‘Follow’ button as well in this case. This is how it looks in PHPRunner project:
7. Prettifying it
And the following needs to be pasted to ‘Custom CSS’ section under Style Editor to make everything look good.
.p-author:before,.p-author:after,.cards-base:before,.cards-base:after { display: table; content: "" } .p-author:after,.cards-base:after { clear: both } .tweet,.root,.p-author { zoom:1} .root,.tweet,.footer,.detail-expander,.header,.timeline { position: relative } .custom-timeline-owner-profile,.timeline .e-entry-title,.p-author .p-name,.cards-base h3,.new-tweets-bar button,.load-tweets,.no-more-pane { font-size: 14px; line-height: 16px } .custom-timeline-owner-profile .p-nickname { font-size: 13px } .custom-timeline-owner-profile .p-name,.p-author .profile .p-name,.cards-base .profile .p-name { font-weight: bold } .timeline-header .custom-timeline-summary,.timeline-header h1.summary { font-size: 18px; font-weight: bold; line-height: 18px } .p-author a,.e-entry-title,.cards-base h3,.cards-base .cards-content p { line-height: 18px } .e-entry-title a { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap } a,a:visited,a:active,a:hover,a:focus,.p-author .full-name,.p-author a.profile,.p-author a.profile:hover .p-nickname,.p-author a.profile:focus .p-nickname,.p-author a.profile:hover .p-nickname b,.p-author a.profile:focus .p-nickname b,.timeline-header .custom-timeline-owner-profile:hover,.timeline-header .custom-timeline-owner-profile:focus,.custom-timeline-owner-profile:hover .p-nickname,.custom-timeline-owner-profile:focus .p-nickname,.custom-timeline-owner-profile:hover .p-nickname b,.custom-timeline-owner-profile:focus .p-nickname b,.cards-base a.profile:hover .p-nickname,.cards-base a.profile:focus .p-nickname,.cards-base a.profile:hover .p-nickname b,.cards-base a.profile:focus .p-nickname b,.cards-base .byline-user .p-nickname { text-decoration: none; outline: 0 } a:hover b,a:focus b,a:hover span,a:focus span,h3 a:hover,h3 a:focus,.timeline-header a:hover,.timeline-header a:focus,.e-entry-title .link:hover,.e-entry-title .link:focus,.footer a.expand:hover,.footer a.expand:focus,a.permalink:hover,a.permalink:focus,a.long-permalink:hover,a.long-permalink:focus,.cards-base p a:hover,.cards-base p a:focus,.retweet-credit a:hover,.retweet-credit a:focus { text-decoration: underline } html,.p-author .profile .p-name,.custom-timeline-owner-profile .p-name,.cards-base p,.cards-base p a,.timeline-header .custom-timeline-summary,.timeline-header .custom-timeline-summary a:link,.timeline-header .custom-timeline-summary a:visited,.timeline-header .summary,.timeline-header .summary a:link,.timeline-header .summary a:visited,.p-author a.profile:hover .p-name,.p-author a.profile:focus .p-name { color: #292f33 } .customisable,.customisable:link,.customisable:visited,.customisable:hover,.customisable:focus,.customisable:active,.customisable-highlight:hover,.customisable-highlight:focus,a:hover .customisable-highlight,a:focus .customisable-highlight { color: #0084b4 } a:link,a:visited,.stats span,.byline,.retweet-credit,.no-more-pane,.no-tweets-pane p,.p-geo,.cards-base .byline-user,.timeline-header .list-description { color: #707070 } a:hover,a:focus,a:active,.p-author a.profile:hover,.p-author a.profile:focus,.retweet-credit .profile:hover,.retweet-credit .profile:focus,.stats strong,.no-tweets-pane .load-tweets,.nsfw { color: #66757f } .tweet-box-button { color: #aaa } .customisable-border { border: 1px solid #e8e8e8 } .timeline { margin-bottom: 10px; background-color: #fff; border-radius: 5px } .timeline .stream { position: relative; width: 100%; overflow-x: hidden; overflow-y: scroll } .timeline.pending-scroll-in .stream .h-feed { -webkit-transition: margin-top .5s ease-out; -moz-transition: margin-top .5s ease-out; -o-transition: margin-top .5s ease-out; transition: margin-top .5s ease-out } .timeline-header,.timeline-footer { position: relative; z-index: 100 } .timeline-header { padding: 12px; border-width: 0 0 1px; box-shadow: 0 0 0 -3px rgba(0,0,0,0); -webkit-transition: box-shadow .3s ease-out; -moz-transition: box-shadow .3s ease-out; -o-transition: box-shadow .3s ease-out; transition: box-shadow .3s ease-out } .scrolled-down .timeline-header { box-shadow: 0 0 10px -3px #ccc } .timeline-header h1.summary { font-weight: bold } .timeline-header .follow-button,.timeline-header .twitter-follow-button,.timeline-header .ic-twitter-badge { position: absolute; top: 10px; right: 10px } .ic-twitter-badge { border: 1px solid #fff; border-color: transparent; border-radius: 3px } .ic-twitter-badge:focus { border-color: #00acee } .new-tweets-bar { position: absolute; right: 0; left: 0; z-index: 100; display: none; width: auto; margin-top: -2px; opacity: 0; -webkit-transition: opacity .3s ease-in; -moz-transition: opacity .3s ease-in; -o-transition: opacity .3s ease-in; transition: opacity .3s ease-in } .pending-new-tweet-display .new-tweets-bar { display: block } .pending-new-tweet .new-tweets-bar { opacity: 1 } .new-tweets-bar button { width: 100%; _width: 92%; padding: 10px 0; color: #fff; text-align: center; background-color: #222; background-color: rgba(0,0,0,0.87); border-width: 0 } .new-tweets-bar button:hover,.new-tweets-bar button:focus { text-decoration: underline; cursor: pointer } button.load-more { display: block; width: 100%; *width: 92%; padding: 10px 0; margin: 0; text-align: center; text-shadow: 0 1px 0 rgba(255,255,255,0.4); cursor: pointer; background-color: #fcfcfc; background-color: rgba(0,0,0,0.02); border: 0; box-shadow: inset 0 3px 8px rgba(0,0,0,0.05); -webkit-transition: background-color .2s ease-out; -moz-transition: background-color .2s ease-out; -o-transition: background-color .2s ease-out; transition: background-color .2s ease-out } .timeline-footer { padding: 6px 10px; background: #e8e8e8; background: rgba(0,0,0,0.1) } .timeline-footer a.widget-link { display: block; padding: 10px; text-align: center } .tweet-box-button { display: block; width: 100%; padding: 6px; text-align: left; background: #fff; border: 1px #ccc solid; border-radius: 4px } .tweet-box-button:hover,.tweet-box-button:focus { cursor: pointer; border-color: #999; border-color: rgba(0,0,0,0.4) } a.tweet-box-button { width: auto } .tweet { padding: 12px 12px 10px 69px; border-width: 0 0 1px } .tweet.with-expansion { cursor: pointer } .header { _float: left; _clear: left } .header .avatar { position: absolute; top: 0; left: -57px; width: 48px; height: 48px; background: #fff; border-radius: 4px } .permalink { position: relative; z-index: 50; float: right; margin-top: 2px; _clear: right } .tweet .e-entry-title { margin: 0 5px 0 0; overflow: hidden; clear: both; word-wrap: break-word; white-space: pre-wrap } .inline-media { max-width: 100%; margin: 10px 0 0; overflow: hidden } .tweet .retweet-credit { margin: 3px 0 } .tweet .twitter-alerts { margin-top: 6px } .footer { overflow: hidden; zoom:1} .tweet-actions { position: absolute; _position: static; right: 0; bottom: 1px; _float: right; background: #fff; visibility: hidden; _visibility: visible; box-shadow: 0 0 10px 5px #fff } .tweet-actions li { _display: inline; float: left } .tweet-actions a i { margin: 1px 0 0 8px; *margin: 1px 0 0 3px; overflow: hidden } .tweet:hover .tweet-actions,.tweet:focus .tweet-actions,.expanded .tweet-actions { visibility: visible } .tweet .tweet-actions a,.tweet .tweet-actions a b,.tweet .tweet-actions a i,.tweet .tweet-actions li { cursor: pointer; outline: 0 } .twt-tweet .tweet-actions .ic-retweet { margin-top: 1px } .footer { min-height: 16px; padding-top: 1px; margin-top: 2px; overflow: hidden; border-width: 0; -webkit-transition: margin-top .2s ease-out,padding-top .2s ease-out; -moz-transition: margin-top .2s ease-out,padding-top .2s ease-out; -o-transition: margin-top .2s ease-out,padding-top .2s ease-out; transition: margin-top .2s ease-out,padding-top .2s ease-out } .follow-button:link,.follow-button:visited { display: inline-block; padding: 0 5px 0 3px; font: bold 11px/18px 'Helvetica Neue',Arial,sans-serif; color: #333; text-decoration: none; text-shadow: 0 1px 0 rgba(255,255,255,0.5); white-space: nowrap; cursor: pointer; background-color: #eee; background-image: -webkit-linear-gradient(#fff,#dedede); background-image: linear-gradient(#fff,#dedede); border: #ccc solid 1px; border-radius: 3px } .ie9 .follow-button:link,.ie9 .follow-button:visited { border-radius: 0; -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#dedede')" } .follow-button:focus,.follow-button:hover,.follow-button:active { color: #333; text-decoration: none; background-color: #d9d9d9; background-image: -webkit-linear-gradient(#f8f8f8,#d9d9d9); background-image: linear-gradient(#f8f8f8,#d9d9d9); border-color: #bbb; box-shadow: none } .timeline-header a.follow-button:link,.timeline-header a.follow-button:visited,.timeline-header a.follow-button:hover,.timeline-header a.follow-button:focus,.timeline-header a.follow-button:active,.thm-dark .timeline-header a.follow-button:link,.thm-dark .timeline-header a.follow-button:visited,.thm-dark .timeline-header a.follow-button:hover,.thm-dark .timeline-header a.follow-button:focus,.thm-dark .timeline-header a.follow-button:active { color: #333; text-decoration: none } .thm-dark a.follow-button:link,.thm-dark a.follow-button:visited,.thm-dark a.follow-button:hover,.thm-dark a.follow-button:focus,.thm-dark a.follow-button:active { color: #333 } .ie9 .follow-button:hover,.ie9 .follow-button:focus,.ie9 .follow-button:active { -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#d9d9d9')" } .follow-button:active { background-color: #efefef; box-shadow: inset 0 3px 5px rgba(0,0,0,0.1) } .follow-button:focus { border-color: #0089cb; outline: 0 } .e-entry-title, .full-name { font: normal normal normal 12px/16px "Helvetica Neue",Roboto,"Segoe UI",Calibri,sans-serif; } .verified,.ic-rt,.ic-mask,.ic-top,.ic-twitter-alert,.ic-twitter-badge,.ic-bird-flourish,.ic-button-bird,.ic-play { display: inline-block; vertical-align: middle; background: transparent url(../images/sprite.png) no-repeat 0 0; background-image: url(data:image/png;base64,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); background-size: 177px 241px } .ic-bird-flourish { display: block; width: 32px; height: 20px; margin: 12px auto 0; background-position: -40px -161px } .ic-button-bird { width: 16px; height: 16px; margin: 0 3px 0 0; background-position: -73px -160px }