brunocvcunha/instagram4j

View on GitHub
src/examples/java/live/LiveTest.java

Summary

Maintainability
A
3 hrs
Test Coverage
package live;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;

import org.junit.Test;

import com.github.instagram4j.instagram4j.IGClient;
import com.github.instagram4j.instagram4j.exceptions.IGLoginException;
import com.github.instagram4j.instagram4j.exceptions.IGResponseException;
import com.github.instagram4j.instagram4j.requests.live.LiveBroadcastGetCommentRequest;
import com.github.instagram4j.instagram4j.requests.live.LiveBroadcastGetLikeCountRequest;
import com.github.instagram4j.instagram4j.requests.live.LiveBroadcastGetViewerListRequest;
import com.github.instagram4j.instagram4j.requests.live.LiveCreateRequest;
import com.github.instagram4j.instagram4j.requests.live.LiveEndBroadcastRequest;
import com.github.instagram4j.instagram4j.requests.live.LiveGetQuestionsRequest;
import com.github.instagram4j.instagram4j.requests.live.LiveQuestionActivateRequest;
import com.github.instagram4j.instagram4j.requests.live.LiveQuestionDeactivateRequest;
import com.github.instagram4j.instagram4j.requests.live.LiveStartRequest;
import com.github.instagram4j.instagram4j.responses.IGResponse;
import com.github.instagram4j.instagram4j.responses.live.LiveBroadcastGetCommentResponse;
import com.github.instagram4j.instagram4j.responses.live.LiveBroadcastGetViewerListResponse;
import com.github.instagram4j.instagram4j.responses.live.LiveBroadcastLikeResponse.LiveBroadcastGetLikeCountResponse;
import com.github.instagram4j.instagram4j.responses.live.LiveCreateResponse;

import lombok.extern.slf4j.Slf4j;
import serialize.SerializeTestUtil;

@Slf4j
public class LiveTest {
    @Test
    // Run SerializeTestUtil.serializeLogin first to generate saved sessions
    public void test()
            throws IGLoginException, IGResponseException, ClassNotFoundException,
            FileNotFoundException, IOException {
        IGClient client = SerializeTestUtil.getClientFromSerialize("igclient.ser", "cookie.ser");
        LiveCreateRequest liveCreate = new LiveCreateRequest();
        LiveStartRequest liveStart;
        LiveCreateResponse createResponse = client.sendRequest(liveCreate).join();
        System.out.printf("Url:\n%s\nKey:\n%s\nBroadcast Id:\n%s\n",
                createResponse.getBroadcastUrl(), createResponse.getBroadcastKey(),
                createResponse.getBroadcast_id());
        Scanner in = new Scanner(System.in);
        System.out.println("Type 's' to start");
        in.nextLine();
        String id = createResponse.getBroadcast_id();
        liveStart = new LiveStartRequest(id, true);
        client.sendRequest(liveStart);

        System.out.println("Currently streaming. Type 'end' to end.");
        String input;
        long like_ts = 0, comment_ts = 0;
        while (!(input = in.nextLine()).equals("end")) {
            try {
                switch (input.split(" ")[0]) {
                    default:
                        log.info("Unknown. Type 'end' to end.");
                        break;
                    case "viewers":
                        LiveBroadcastGetViewerListRequest vrequest =
                                new LiveBroadcastGetViewerListRequest(id);
                        LiveBroadcastGetViewerListResponse vresponse =
                                vrequest.execute(client).join();
                        log.info("Viewers List ({})", vresponse.getUsers().size());
                        vresponse.getUsers().forEach(profile -> log.info("{} ({})",
                                profile.getUsername(), profile.getPk()));
                        break;
                    case "comments":
                        LiveBroadcastGetCommentRequest crequest =
                                new LiveBroadcastGetCommentRequest(id, comment_ts);
                        LiveBroadcastGetCommentResponse cresponse = crequest.execute(client).join();
                        if (cresponse.getComments().size() > 0)
                            comment_ts = cresponse.getComments()
                                    .get(cresponse.getComments().size() - 1).getCreated_at();
                        break;
                    case "questions":
                        LiveGetQuestionsRequest qrequest = new LiveGetQuestionsRequest();
                        IGResponse qresponse = qrequest.execute(client).join();
                        break;
                    case "likes":
                        LiveBroadcastGetLikeCountRequest lrequest =
                                new LiveBroadcastGetLikeCountRequest(id, like_ts);
                        LiveBroadcastGetLikeCountResponse lResponse =
                                lrequest.execute(client).join();
                        log.info("Total likes : {}", lResponse.getLikes());
                        like_ts = lResponse.getLike_ts();
                        break;
                    case "activate":
                        LiveQuestionActivateRequest actRequest =
                                new LiveQuestionActivateRequest(id, input.split(" ")[1]);
                        actRequest.execute(client).join();
                        break;
                    case "deactivate":
                        LiveQuestionDeactivateRequest deactRequest =
                                new LiveQuestionDeactivateRequest(id, input.split(" ")[1]);
                        deactRequest.execute(client).join();
                        break;
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }

        client.sendRequest(new LiveEndBroadcastRequest(id)).join();
        in.close();
    }

}