Package com.appspot.plucial.controller.account.ajax

Source Code of com.appspot.plucial.controller.account.ajax.GetNewActivitysController

package com.appspot.plucial.controller.account.ajax;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.slim3.controller.Navigation;

import com.appspot.plucial.Constants;
import com.appspot.plucial.exception.DataInvalidException;
import com.appspot.plucial.model.ActivityModel;
import com.appspot.plucial.model.UserModel;
import com.appspot.plucial.service.ActivityService;
import com.appspot.plucial.service.AlbumService;
import com.appspot.plucial.utils.Utils;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.plus.Plus;
import com.google.api.services.plus.model.Activity;
import com.google.api.services.plus.model.Activity.PlusObject.Attachments;
import com.google.api.services.plus.model.Activity.PlusObject.Attachments.Thumbnails;
import com.google.api.services.plus.model.ActivityFeed;
import com.google.appengine.api.taskqueue.Queue;
import com.google.appengine.api.taskqueue.QueueFactory;
import com.google.appengine.api.taskqueue.TaskOptions.Builder;

/**
* ユーザー追加コントローラー
* @author takahara
*
*/
public class GetNewActivitysController extends BaseController {

    @Override
    protected Navigation execute(UserModel userModel) throws Exception {

        getActivitys(userModel);

        return null;
    }


    /**
     * アクティビティの取得
     * @throws IOException
     */
    private void getActivitys(UserModel userModel) throws Exception {

        int limit =  asString("num") == null || asString("num").equals("") ? 1 : Integer.valueOf(asString("num"));

        // トークン情報の作成
        GoogleCredential credential = new GoogleCredential.Builder()
        .setJsonFactory(JSON_FACTORY)
        .setTransport(TRANSPORT)
        .setClientSecrets(Constants.GOOGLE_PROJECT_CLIENT_ID, Constants.GOOGLE_PROJECT_CLIENT_SECRET).build()
        .setRefreshToken(userModel.getRefreshToken());

        // リフレッシュトークンを元にアクセストークンを更新
        credential.refreshToken();

        // Google+ API の設定(デフォルト1回につき20件)
        Plus plus = new Plus.Builder(TRANSPORT, JSON_FACTORY, credential)
        .setApplicationName(Constants.GOOGLE_APPLICATION_NAME)
        .build();

        Plus.Activities.List listActivities = plus.activities().list("me", "public").setFields(Constants.TARGET_ACTIVITY_FIELDS);

        // 最初のページのリクエストを実行します
        ActivityFeed activityFeed = listActivities.execute();

        // リクエストのラップを解除し、必要な部分を抽出します
        List<Activity> activities = activityFeed.getItems();

        // Twitter対象リスト
        List<String> twitterActivityIdList = new ArrayList<String>();
        // Facebook対象リスト
        List<String> facebookActivityIdList = new ArrayList<String>();
        // Evernote対象リスト
        List<String> evernoteActivityIdList = new ArrayList<String>();

        int count = 1;

        while (activities != null && count <= limit) {

            for (Activity activity : activities) {

                ActivityModel oldModel = ActivityService.getActivity(activity.getId());

                try {
                    if(oldModel == null) {
                        ActivityModel newActivityModel = ActivityService.putActivity(activity, userModel);

                        // アルバム内の画像を保存
                        List<Attachments> attachmentsList = activity.getObject().getAttachments();
                        if(attachmentsList != null
                                && attachmentsList.size() > 0) {

                            Attachments attachment = attachmentsList.get(0);
                            if(attachment.getThumbnails() != null && attachment.getThumbnails().size() > 0) {

                                for(Thumbnails thumbnails: attachment.getThumbnails()) {
                                    if(thumbnails != null && thumbnails.getImage() != null) {
                                        AlbumService.put(newActivityModel, thumbnails.getUrl(), thumbnails.getImage().getUrl(), thumbnails.getImage().getHeight(), thumbnails.getImage().getWidth());
                                    }
                                }
                            }
                        }

                     // 他のSNSへの転送
                        if(!Utils.isNoShare(newActivityModel)) {
                            // twitterへPOST対象リストを作成
                            if(Utils.isTwitterRepost(userModel, newActivityModel)) {
                                twitterActivityIdList.add(activity.getId());
                            }

                            // facebookへPOST対象リストを作成
                            if(Utils.isFacebookRepost(userModel, newActivityModel)) {
                                facebookActivityIdList.add(activity.getId());
                            }

                            // EvernoteへPOST対象リストを作成
                            if(Utils.isEvernoteRepost(userModel, newActivityModel)) {
                                evernoteActivityIdList.add(activity.getId());
                            }
                        }
                    }

                }catch (DataInvalidException e) {};
            }

            // 次のページのトークンが null になると、最終ページに到達したことがわかります。
            // その場合は break。
            if (activityFeed.getNextPageToken() == null) {
                break;
            }

            // 次のページのアクティビティをリクエストする準備をします
            listActivities.setPageToken(activityFeed.getNextPageToken());

            // 次のページのリクエストを実行して処理します
            activityFeed = listActivities.execute();
            activities = activityFeed.getItems();

            // API呼び出しカウントを加算
            count++;
        }


        // Activity Id リストを逆順でTwitterにPOST
        for(int i=twitterActivityIdList.size(); i > 0; i--) {
            Queue queue = QueueFactory.getQueue("twitter-queue-group" + userModel.getGroup());
            queue.add(Builder.withUrl("/task/twitterPostTask").param("user", userModel.getKey().getName()).param("activityId", twitterActivityIdList.get(i - 1)));
        }

        // Activity Id リストを逆順でFaceBookにPOST
        for(int i=facebookActivityIdList.size(); i > 0; i--) {
            Queue queue = QueueFactory.getQueue("facebook-queue-group" + userModel.getGroup());
            queue.add(Builder.withUrl("/task/faceBookPostTask").param("user", userModel.getKey().getName()).param("activityId", facebookActivityIdList.get(i - 1)));
        }

        // Activity Id リストを逆順でEvernoteにPOST
        for(int i=evernoteActivityIdList.size(); i > 0; i--) {
            Queue queue = QueueFactory.getQueue("evernote-queue-group" + userModel.getGroup());
            queue.add(Builder.withUrl("/task/evernotePostTask").param("user", userModel.getKey().getName()).param("activityId", evernoteActivityIdList.get(i - 1)));
        }

    }
}
TOP

Related Classes of com.appspot.plucial.controller.account.ajax.GetNewActivitysController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.