<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Twitter 데이터를 JMP 데이터 테이블로 스트리밍
동영상만 보고 싶으면 끝까지 스크롤하세요.
JMP 11 및 12에서 Mac 및 Win에서 이 JSL에 대한 최소한의 테스트를 수행했습니다.이 비디오는 JMP의 차기 버전에 있는 기능을 활용하지만 그렇다고 해서 중단하지 마십시오.여기에 귀하의 경험에 대한 의견을 추가하십시오.JSL은 첨부된 ZIP 파일에 있습니다.
이 포스트는 가볍게 여러 주제를 다루고 있습니다.
- 트위터 계정
- 스트리밍 데이터
- 비트 조작
- JSON
- OAuth 승인, 서명
- 곱슬 곱슬하다
- 지도 좌표
개요: JSL의 압축을 디렉토리에 풉니다.Twitter 앱을 만들고 키를 JSL 파일에 복사합니다.(Windows) cURL을 복사하고 MAIN.jsl에 경로를 입력합니다.MAIN.jsl 파일을 실행합니다.
시작하다
트위터 계정이 필요하며 시작하기 전에 트위터 이용 약관을 읽고 이해해야 합니다.(스트림에서 수집한 데이터는 귀하의 소유가 아니며 사용 방법에 제한이 있습니다.괜찮은지 아닌지에 대한 조언은 하지 않겠습니다.)
트위터 계정을 사용하여 https://apps.twitter.com/ 새 응용 프로그램을 만듭니다.이것은 휴대 전화와 같은 앱이 아닙니다.프로그램이 Twitter 스트림에 액세스할 수 있도록 하는 키 세트입니다.그 프로그램은 휴대폰의 앱일 수도 있고 JSL일 수도 있고 다음과 같은 Python 프로그램일 수도 있습니다. http://www.tweepy.org/ 제공합니다.(저는 tweepy로 시작한 다음 JSL 경로를 따라갔습니다.Tweepy 또는 다른 파이썬 기반 솔루션이 이 JSL 솔루션보다 나을 수 있습니다.)
새로 만들기를 클릭하여 새 응용 프로그램을 만들고, 다른 사람이 사용하지 않은 이름을 만들고, 설명을 추가하고, 웹 사이트 이름을 채우고, 콜백 URL을 비워 둡니다.웹 사이트 이름을 제공해야 하지만 제안된 대로 자리 표시자를 사용할 수 있습니다.계약을 읽은 다음 Twitter 애플리케이션 만들기를 클릭합니다.

탭이 있는 화면에 도착했습니다. 세 번째 탭인 키 및 액세스 토큰이 원하는 탭입니다.

상단에서 필요한 것 중 일부인 소비자 키와 소비자 비밀을 찾을 수 있습니다.소비자 키와 비밀이 필요합니다.JMP 프로젝트를 시작하십시오. 여러 파일이 있으므로 디렉토리를 만들고 JSL 파일의 압축을 풀고 EncryptedKeys.JSL을 편집하고 채우기를 시작합니다.
// 앱 사용.twitter.com 새 응용 프로그램을 만듭니다.여기에서 키를 복사합니다.
ConsumerKey = "Pnb…LAZ";
ConsumerSecret = "AF4C....................................... qNvXp";
맨 아래에 있는 Create my access token 버튼을 클릭하여 마지막 두 값을 가져옵니다.

복사...액세스 토큰은 모두 하이픈으로 한 줄에...
accessToken = "3………………………………………………………………………………am";
accessTokenSecret = "rc......................................HJ";
EncryptedKeys.JSL에는 주석을 포함하여 5줄이 있습니다.다른 파일에 포함됩니다. EncryptedKeys.JSL을 저장하는 컴퓨터의 보안을 고려해야 합니다.키 중 2개는 공개된 것으로 간주되지만 2개는 사용자만 알아야 하는 비밀입니다.다른 누구도 공개 키를 필요로 하지 않으므로 모두 한 곳에 머물 수 있습니다.
방문 https://apps.twitter.com/ 앱이 존재하는지 확인하면 트위터에서 로그아웃할 수 있습니다.
트위터 스트리밍
Twitter는 서비스를 사용하는 다른 방법을 제공합니다. https://dev.twitter.com/ 특정 트윗을 검색하고 새 트윗을 만들 수 있지만 스트리밍은 필터를 사용하여 실시간 트윗을 수집하는 것입니다.트위터가 적용할 수 있는 필터는 그들의 컴퓨터에 효율적으로 설계되었으며 당신이 원하는 것을 정확히 하지 않을 수도 있습니다(당신이 그들에게 얼마를 지불하고 있는지 기억하십시오).가장 흥미로운 쿼리는 키워드 및 지리적 영역에 대한 것입니다. 결과는 모든 검색어의 합집합(교집합 아님)이 됩니다.예제 비디오에서는 지리적 경계 상자 없이 "아침", "점심" 및 "저녁"을 사용했습니다.전 세계적으로 초당 약 3개의 트윗을 검색했습니다.런던 주변의 경계 상자를 사용하여 검색 범위를 런던으로 좁힐 수는 없습니다. 런던의 모든 트윗과 전 세계의 아침, 점심, 저녁 식사를 반환하려고 합니다.트위터가 스트리밍할 데이터의 양은 아직 확실하지 않습니다. 어느 시점에서는 Twitter가 다시 스로틀링할 것이라고 생각했고, 다른 시점에서는 데이터를 충분히 빠르게 처리할 수 없으면 Twitter가 스트림을 중지할 것이라고 생각했습니다.어쩌면 둘 다 사실일 수도 있습니다.이전 실험에서 "Raleigh"를 선택하고 노스캐롤라이나주 Raleigh 주변에 경계 상자를 배치했습니다.전 세계에서 도난당한 롤리 자전거에 대한 트윗을 받았습니다.
주의
캡처 후 필터링을 직접 수행해야 하며 좋아하지 않는 단어 목록을 직접 작성해야 할 수도 있습니다.무수정 트윗 목록을 공개적으로 제시하면 당황하거나 더 나빠질 것입니다.또한 Twitter에는 데이터를 표시하는 방법에 대한 규칙이 있음을 기억하십시오.
지리적 선택
이 JSL 스니펫은 쿼리 용어와 지리적 위치를 선택합니다.코드가 복잡해지기 때문에 네임스페이스를 사용하기 시작했습니다.
include("PICK.jsl");
PICK:trackParm = "점심, 저녁 식사, 아침 식사"; // 기본 쿼리
PICK:픽(); // 쿼리를 조정하는 GUI

사각형 추가 버튼은 두 개의 사각형을 추가했습니다.PICK 네임스페이스의 값은 나중에 트위터 쿼리를 작성하는 데 사용됩니다.약간의 "and" 기능이 있습니다. 점심을 먹고, 저녁을 먹고, 아침을 먹는다는 "먹다"와 식사를 모두 포함하는 트윗을 선택하는 데 사용할 수 있습니다.그러나 대부분은 ORed(결합)입니다.
추가 포함
include("JSON.jsl"); // 트윗을 구문 분석하기 위한 Xan의 JSON 라이브러리 하위 집합
include("BITS.jsl"); // 비트 조작을 위한 코드
include("AUTH.jsl"); // 인증을 위한 코드
include("SIGN.jsl"); // 서명을 위한 코드
include("PARM.jsl"); // curl용 http parm을 빌드하기 위한 코드
여기에는 많은 JSL을 로드하고 약간의 온전성 검사 및 자체 테스트를 수행하는 것이 포함됩니다.BITS는 나중에 더 빠른 코드를 만들기 위해 일부 데이터 구조를 초기화하는 데 1분이 걸립니다. ++가 로그 창에 인쇄하는 동안 기다려 주십시오.JSON은 다음에서 가져옵니다. Xan이 이전에 했던 작업 ; Twitter 스트림은 JSON 형식으로 전송됩니다.AUTH 및 SIGN에는 EncryptedKeys를 사용하여 Twitter에 인증("로그온")하는 JSL이 포함되어 있습니다.복잡하고 SHA1 해시를 수행하기 위해 컴퓨터에 이미 설치된 외부 프로그램을 사용합니다.비트 함수를 작성할 때 SHA1 해시를 구현해야 한다고 생각했는데 너무 복잡하고 디버깅할 필요가 없는 것을 사용하게 되어 기쁩니다.마지막 포함 PARM은 cURL에 대한 문자열을 빌드합니다.
곱슬 곱슬하다
cURL 사본이 필요합니다.MAC에 이미 존재합니다.Windows 사용자는 다음에서 얻을 수 있습니다. http://curl.haxx.se/ 먼저 시스템 담당자에게 확인한 후.https://en.wikipedia.org/wiki/CURL cURL 질문의 출발점입니다.나는 다운로드했다 Win64 x86_64 CAB .(귀하의 컴퓨터는 IA64가 아니라 I386입니다). curl.exe를 바탕 화면에 끌어다 놓고 JMP가 찾을 위치를 알고 있는지 확인합니다(RunProgram은 $DESKTOP을 확장하지 않고 완전한 답변을 입력합니다!):
cURLlocation="C:\사용자\사용자\데스크탑\curl.exe";
cURL은 JMP가 RunProgram 기능을 통해 액세스할 수 있는 명령줄 유틸리티입니다.cURL 프로그램은 Twitter에 연결하고 트윗 스트림을 다시 JMP에 공급합니다.
프로그램 실행(실행 가능( cURLlocation), 옵션( cURLparms),
readFunction(함수({이},
buftxt ||= this << read( blob );
프로세스();
If( 이 << isReadEOF,
쓰기( 오른쪽( 문자( buftxt ), 100 ) ) );))
cURLparms 및 process() 함수(위에서 사용됨)만 설명하면 됩니다.
cURLparms의 출처 PARM:curlParm( PICK:트랙팜, PICK:위치팜 ); 이는 PICK(위의 방법)를 사용하여 추적할 용어와 추적할 위치를 파악하는 것입니다.PARM 네임스페이스의 curlParm 함수는 consumerKey...applicationTokenSecret 변수(위의 방법)를 사용하여 특정 용어 및 위치에 대한 서명/인증을 수행합니다.
프로세스 함수는 buftxt에서 데이터를 가져와 데이터 테이블에 넣습니다.
운영
완료!첨부 파일을 EncryptedKeys.JSL과 동일한 디렉토리에 넣고 main.jsl을 열어 실행합니다.대화 상자가 열립니다. (처음에는 확인을 누르기만 하면 됩니다...지도 포인트를 표시하는 검색을 사용하려면...) 검색어 몇 개, 작은 위치 또는 둘 다를 설정합니다.
JSL의 끝에서 예기치 않게 중지될 때 RunProgram을 다시 시작하는 루프를 볼 수 있습니다.스크립트에 문제가 있는 경우 Twitter 사이트를 악용하는 것을 방지하기 위해 60초 동안 지연됩니다.인터넷 연결은 며칠 동안 유지되거나 한 시간에 여러 번 실패할 수 있습니다.Twitter가 다양한 이유로 연결을 중단할 수도 있습니다.for-loop는 또한 적은 횟수로 다시 시작하도록 제한됩니다.
스크립트는 거의 테스트되지 않았습니다. 작동하지 않는지 물어보십시오. 감사합니다!
두 번째 데이터 테이블과 지도는 시작 대화 상자의 기본 아침/점심/저녁 값에 따라 다릅니다.아침/점심/저녁 트윗을 찾는 하드 코딩된 JSL이 있습니다.다시 작업하거나 완전히 잘라낼 수 있습니다.
지도 하단에 있는 STOP 버튼은 (아마도) 스크립트를 정상적으로 중지할 것입니다.MAC의 JMP가 향후 릴리스에서 정상적으로 중지되지 않는 버그를 수정했습니다. JMP 11 또는 12에서 강제 종료해야 할 수도 있습니다.
프레젠테이션(데이터 테이블에서 비디오 만들기)
아침/점심/저녁 트윗을 잠시 캡처한 후 동영상을 만들기에 충분한 데이터가 있습니다.여러 최근 게시물의 아이디어를 사용하여…더 나은 색상 코딩 표준을 원하면 하루를 시작하는 데 녹색을 사용하고 하루를 중지하는 데 빨간색을 사용하고 점심 시간에 파란색을 사용합니다.위치 데이터가 있는 행만 유지하도록 행을 부분 집합화합니다.공식을 사용하여 좌표 또는 placeBounding_boxCoordinates의 중심에서 xLon 및 yLat 열을 생성했습니다.

좌표를 사용할 수 없는 경우 수식은 값을 누락으로 설정합니다. 트윗의 약 5%만이 좌표를 가지고 있습니다.
이 열 공식은 트윗을 분류하는 열을 만들었지만 여전히 언어마다 다릅니다.

범주를 결합하기 위해 다음 열 공식이 뒤따릅니다.

비디오 프레임 생성 속도를 높이려면 하위 집합 데이터를 행렬에 로드합니다.
dt = open("$desktop/sha1/TwitterFeed3.jmp");
xLonVec=dt:xLon<
yLatVec=dt:yLat<
종류Vec = dt:종류코드<
timeVec = dt:dateUTC<
닫기(dt,nosave);
프레임을 생성할 GraphBox를 만듭니다.
New Window( "Meal Tweets", // 그래프의 마커 크기는 빨간색/녹색/파란색 트윗 위치에 사용됩니다.
g = 그래프 상자( 프레임 크기( 1920, 900 ), <<배경 지도( 이미지( "상세 지구", 투명도( 1 ) ), 경계( "세계" ) ) , <
);
축을 설정하고 맵을 추가하는 JSL이 더 있습니다.대부분의 작업은 데이터 테이블에서 로드된 행렬을 처리하는 이 그래픽 스크립트에서 수행됩니다.
g[프레임박스(1)] << addGraphicsScript(
투명도(.8);
for(idx=lowIndex,idx<=highIndex,idx++,
Marker( 색상 상태( match(kindVec[idx],1,"green",2,"blue",3,"red") ),{xLonVec[idx], yLatVec[idx]} );
)
);
그리고 지도가 다른 시작 및 종료 시간으로 다시 그려지도록 하고 그림을 캡처하도록 하는 드라이버 코드:
nframes = 초*30; // 30fps에서 초
시작 = min(timeVec);
끝 = 최대(timeVec);
지속 시간 = 종료 - 시작;
델타 = 지속 시간 / nframes;
For( iframe = 0, iframe < nframes, iframe++,
마음먹기 = 시작 + (iframe - 0) * 델타 - 2*3600; // 2시간 뒤로.
최대 날짜 = 시작 + (iframe + 1) * 델타 + 3600; // 앞으로 1시간
lowIndex=floor(보간(mindate,timeVec,1::nrows(timeVec)));
highIndex=floor(보간(maxdate,timeVec,1::nrows(timeVec)));
지<<다시보기;
대기( 1 );
g[framebox(1)]<<사진 저장("$temp/tweet"||right(char(iframe,6),6,"0")||".png","png");
);
결국에는 비디오 제작을 위한 프레임이 생깁니다.저는 블렌더(긴 학습 곡선이지만 강력함)를 사용하여 미국 추수감사절 연휴를 포함하여 16일 동안 377,765개의 트윗이 있는 이 5분짜리 비디오를 만들었습니다.총 8,187,114개의 트윗이 있었지만 대부분은 위도와 경도 데이터를 포함하지 않았습니다.이 작업을 다시 수행하면 수집되는 데이터의 하위 집합을 지정합니다. 2.5GB 풀 테이블은 큽니다.
https://www.youtube.com/watch?v=N20KsrmdgOU 최대화!
첨부 파일이 없습니까? 여기를 클릭 게시물을 보기 위해.