คำสั่งแบบง่ายสำหรับผู้เริ่มต้นพัฒนาแอพพลิเคชันแบบ Cross-Platform ด้วย ionic framework และ AngularJS ดึง API ของ instagram ผ่านการใช้ #HashTag ต่างๆ มาแสดงผล
ง่ายและเร็ว คือ คำนิยามสั้นของบทความนี้
ทบทวนบทเรียนย้อนหลังได้ที่
เราจะใช้ตัวอย่างของบทเรียนก่อนหน้านี้แบบเน้นๆ เลยในบทเรียนนี้คือ
- ระบบ Login ผ่าน Webservice บน ionic framework ด้วย AngularJS
- การใช้งาน ionic Framework ร่วมกับ AngularJS แสดง Card View
- AngularJS กับการทำงานร่วมกับ Web Service JSON
เพียงเท่านั้นครับ รันคำสั่งสร้างแอพฯ เราขึ้นมาเลย
ionic start LoginSample sidemenu
ไปทำการสมัคร instagram API ให้เรียบร้อย

เราจะใช้ #HashTag และ Client_id ในการค้นหา รูปแบบการเรียก jSON Webservice คือ
https://api.instagram.com/v1/tags/ใส่ # ของคุณ/media/recent?client_id=ใส่ Client ID&count=200
ผมเลือกใช้ #DPUCuteGirl ของกลุ่มลูกศิษย์ที่มหาวิทยาลัยแล้วกัน

แก้ไขไฟล์ ‘www/js/controller.js’ ให้เรียก Web Service โดยการประกาศ Header เรียก $Function เพิ่มคือ
angular.module('starter.controllers', [])
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $ionicPopup, $http ,$location, $window) {
และแก้ไข ‘PlaylistsCtrl’ ใหม่เป็นดังนี้
.controller('PlaylistsCtrl', function($scope,$http, $location, $window) {
$http.get("https://api.instagram.com/v1/tags/CleoCampaign/media/recent?client_id=5040fe7f8d1e44d8a89afb2918c13fbb&count=200")
.success(function (response) {$scope.instagram = response.data;});
})
ภาพรวมของไฟล์เป็นแบบนี้ครับ
angular.module('starter.controllers', [])
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $ionicPopup, $http ,$location, $window) {
// With the new view caching in Ionic, Controllers are only called
// when they are recreated or on app start, instead of every page change.
// To listen for when this page is active (for example, to refresh data),
// listen for the $ionicView.enter event:
//$scope.$on('$ionicView.enter', function(e) {
//});
// Form data for the login modal
$scope.loginData = {};
// Create the login modal that we will use later
$ionicModal.fromTemplateUrl('templates/login.html', {
scope: $scope
}).then(function(modal) {
$scope.modal = modal;
});
// Triggered in the login modal to close it
$scope.closeLogin = function() {
$scope.modal.hide();
};
// Open the login modal
$scope.login = function() {
$scope.modal.show();
};
// Perform the login action when the user submits the login form
$scope.doLogin = function() {
console.log('Doing login', $scope.loginData);
var request = $http({
method: "post",
url: "http://thedarkdev.com/project/api/login.php?access_token=CAACEdEose0cBAJG5nxyW",
data: {
username: $scope.loginData.username,
password: $scope.loginData.password
},
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
request.success(function (data) {
$scope.message = "Console : "+data;
if(data=="false"){
$scope.showAlertFail();
}else{
$scope.showAlertSuccess();
}
});
};
$scope.showAlertFail = function() {
var alertPopup = $ionicPopup.alert({
title: 'Login Fail!',
template: 'Invalid Username and Password '
});
};
$scope.showAlertSuccess = function() {
var alertPopup = $ionicPopup.alert({
title: 'Login Success!',
template: 'Welcome Back: "'+ $scope.loginData.username +'"'
});
$scope.modal.hide();
};
})
.controller('PlaylistsCtrl', function($scope,$http, $location, $window) {
$http.get("https://api.instagram.com/v1/tags/dpucutegirl/media/recent?client_id={ใส่เอง}&count=200")
.success(function (response) {$scope.instagram = response.data;});
})
.controller('PlaylistCtrl', function($scope, $stateParams) {
});
ไปแก้ไข Templates เล็กน้อยในการ ดึง มิติของ Array ใน JSON เช่น Caption มันจะต้องดึงทั้งหมด 3 ระดับ คือ
data.caption.text
ไฟล์ playlists.html ต้องเป็นดังนี้ครับ
<ion-view view-title="Instagram Daydev">
<ion-content>
<ion-list>
<ion-item ng-repeat="data in instagram" href="#/app/playlists/{{data.id}}">
{{data.caption.text}}
</ion-item>
</ion-list>
</ion-content>
</ion-view>
อย่าลืมถ้ารันใน localhost มีปัญหา Allow-Control-Allow-Origin: *
นั่นเพราะมันเรียก HTTPRequest แบบ Cross Domain ไม่ได้ครับต้องตั้งค่า Allow-Control-Allow-Origin: * ก่อน วิธีที่ง่ายสุดก็คือ โหลด Add-on ของ Google Chrome ครับชื่อ “Allow-Control-Allow-Origin: *”
ติดตั้งเสร็จ จะมีมุมขวา COR สีแดง ให้กด Allow เป็น สีเขียวครับ แอพเราจะทำงานได้สมบูรณ์ แสดงผลหน่อยจะเป็นดังตัวอย่าง

ทีนี้ก็ไปหา CardView สวยๆ มาวางที่ไฟล์ PlayLists.html ใน folder ‘www/templates’ ครับ ดูระดับของมิติบน array ให้ดีใน JSON ครับ
<ion-view view-title="Instagram Daydev">
<ion-content>
<ion-list>
<div class="list card" ng-repeat="data in instagram" href="#/app/playlists/{{data.id}}">
<div class="item item-avatar">
<img src="{{data.images.thumbnail.url}}">
<h2>{{data.user.username}}</h2>
<p>#{{data.tags}}</p>
</div>
<div class="item item-body">
<img class="full-image" src="{{data.images.low_resolution.url}}">
<p>
{{data.caption.text}}
</p>
<p>
<a href="#" class="subdued">{{data.likes.count}} Like</a>
<a href="#" class="subdued">{{data.comments.count}} Comments</a>
</p>
</div>
<div class="item tabs tabs-secondary tabs-icon-left">
<a class="tab-item" href="#">
<i class="icon ion-thumbsup"></i>
Like
</a>
<a class="tab-item" href="#">
<i class="icon ion-chatbox"></i>
Comment
</a>
<a class="tab-item" href="#">
<i class="icon ion-share"></i>
Share
</a>
</div>
</div>
</ion-list>
</ion-content>
</ion-view>
ทดสอบ

เลื่อนภาพสวยๆ

เสร็จเรียบร้อยครับ การดึง API ของ instagram ด้วย #HashTag ที่เป็น Web Service นั้นไม่เห็นยากตรงไหนเลยใช่ไหมครับเอาไปลองทำกันดู ล่ะกันสบายๆ ไปก่อนล่ะครับ
ทบทวนบทเรียนย้อนหลังได้ที่




