├── .meteor
├── .gitignore
├── release
├── platforms
├── .id
├── .finished-upgraders
├── packages
└── versions
├── .gitignore
├── imports
├── ui
│ ├── components
│ │ ├── Header
│ │ │ ├── Header.css
│ │ │ └── index.js
│ │ ├── AccountsUIWrapper
│ │ │ └── index.js
│ │ └── AnnotationCounter
│ │ │ └── index.js
│ └── containers
│ │ ├── Highscores
│ │ ├── HighscoreListItem
│ │ │ ├── HighscoreListItem.css
│ │ │ └── index.js
│ │ └── index.js
│ │ ├── App
│ │ ├── App.css
│ │ └── index.js
│ │ ├── Guidelines
│ │ └── index.js
│ │ ├── Download
│ │ └── index.js
│ │ ├── Welcome
│ │ └── index.js
│ │ └── Annotation
│ │ └── index.js
├── startup
│ ├── accounts-config.js
│ └── client
│ │ └── routes.jsx
└── api
│ ├── all-users.js
│ ├── tweets.js
│ └── user.js
├── client
├── main.css
├── main.html
└── main.jsx
├── server
├── main.js
├── tweet-methods
│ └── index.js
├── api
│ └── tweets
│ │ ├── twitter.js
│ │ └── index.js
└── fixtures-999.js
├── README.md
├── package.json
└── .eslintrc
/.meteor/.gitignore:
--------------------------------------------------------------------------------
1 | local
2 |
--------------------------------------------------------------------------------
/.meteor/release:
--------------------------------------------------------------------------------
1 | METEOR@1.4.2.6
2 |
--------------------------------------------------------------------------------
/.meteor/platforms:
--------------------------------------------------------------------------------
1 | server
2 | browser
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | *.sh
3 | *.tar.gz
4 |
--------------------------------------------------------------------------------
/imports/ui/components/Header/Header.css:
--------------------------------------------------------------------------------
1 | .navbar-header .navbar-toggle .icon-bar {
2 | background-color: #337ab7;
3 | }
4 |
--------------------------------------------------------------------------------
/imports/startup/accounts-config.js:
--------------------------------------------------------------------------------
1 | import { Accounts } from 'meteor/accounts-base';
2 |
3 | Accounts.ui.config({
4 | passwordSignupFields: 'USERNAME_ONLY',
5 | });
6 |
--------------------------------------------------------------------------------
/imports/ui/containers/Highscores/HighscoreListItem/HighscoreListItem.css:
--------------------------------------------------------------------------------
1 | .highscore-list-item {
2 | margin: 10px 0;
3 | }
4 |
5 | .highscore-list-item h3 {
6 | display: inline;
7 | margin-left: 20px;
8 | }
9 |
--------------------------------------------------------------------------------
/imports/ui/containers/App/App.css:
--------------------------------------------------------------------------------
1 | #components-layout-demo-top .logo {
2 | width: 120px;
3 | height: 31px;
4 | background: #333;
5 | border-radius: 6px;
6 | margin: 16px 24px 16px 0;
7 | float: left;
8 | }
9 |
--------------------------------------------------------------------------------
/client/main.css:
--------------------------------------------------------------------------------
1 | head {
2 | font-family: 'Roboto', sans-serif;
3 | }
4 |
5 | h1, h2, h3, h4, h5, h6 {
6 | font-family: 'Roboto', sans-serif;
7 | }
8 |
9 | p, div {
10 | font-family: 'Roboto', sans-serif;
11 | }
12 |
13 | .row {
14 | margin-top: 20px;
15 | }
16 |
--------------------------------------------------------------------------------
/client/main.html:
--------------------------------------------------------------------------------
1 |
2 | CATTS
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.meteor/.id:
--------------------------------------------------------------------------------
1 | # This file contains a token that is unique to your project.
2 | # Check it into your repository along with the rest of this directory.
3 | # It can be used for purposes such as:
4 | # - ensuring you don't accidentally deploy one app on top of another
5 | # - providing package authors with aggregated statistics
6 |
7 | i8oyygijtwrt1cby4qf
8 |
--------------------------------------------------------------------------------
/server/main.js:
--------------------------------------------------------------------------------
1 | import { Meteor } from 'meteor/meteor';
2 | import { Tweets } from '../imports/api/tweets';
3 | import '../imports/api/all-users';
4 | import '../imports/api/user';
5 |
6 | import fixtures from './fixtures-999';
7 |
8 | Meteor.startup(() => {
9 | if (Tweets.find().count() === 0) {
10 | fixtures.forEach((tweet) => {
11 | Tweets.insert(tweet);
12 | });
13 | }
14 | });
15 |
--------------------------------------------------------------------------------
/.meteor/.finished-upgraders:
--------------------------------------------------------------------------------
1 | # This file contains information which helps Meteor properly upgrade your
2 | # app when you run 'meteor update'. You should check it into version control
3 | # with your project.
4 |
5 | notices-for-0.9.0
6 | notices-for-0.9.1
7 | 0.9.4-platform-file
8 | notices-for-facebook-graph-api-2
9 | 1.2.0-standard-minifiers-package
10 | 1.2.0-meteor-platform-split
11 | 1.2.0-cordova-changes
12 | 1.2.0-breaking-changes
13 | 1.3.0-split-minifiers-package
14 | 1.4.0-remove-old-dev-bundle-link
15 | 1.4.1-add-shell-server-package
16 |
--------------------------------------------------------------------------------
/imports/ui/containers/Highscores/HighscoreListItem/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import './HighscoreListItem.css';
3 |
4 | const HighscoreListItem = props => (
5 |
6 | {props.rank}
7 |
{props.user.username}
8 | {props.annotationCount}
9 |
10 | );
11 |
12 | HighscoreListItem.propTypes = {
13 | annotationCount: React.PropTypes.number,
14 | rank: React.PropTypes.number,
15 | user: React.PropTypes.object,
16 | };
17 |
18 | export default HighscoreListItem;
19 |
--------------------------------------------------------------------------------
/client/main.jsx:
--------------------------------------------------------------------------------
1 | import { Meteor } from 'meteor/meteor';
2 | import { render } from 'react-dom';
3 | import injectTapEventPlugin from 'react-tap-event-plugin';
4 | import 'bootstrap/dist/css/bootstrap.css';
5 | import 'bootstrap/dist/js/bootstrap';
6 | import { renderRoutes } from '../imports/startup/client/routes.jsx';
7 |
8 | import './main.css';
9 |
10 | // Needed for onTouchTap
11 | // http://stackoverflow.com/a/34015469/988941
12 | injectTapEventPlugin();
13 |
14 | Meteor.startup(() => {
15 | render(renderRoutes(), document.getElementById('render-target'));
16 | });
17 |
--------------------------------------------------------------------------------
/imports/api/all-users.js:
--------------------------------------------------------------------------------
1 | import { Meteor } from 'meteor/meteor';
2 | import { Mongo } from 'meteor/mongo';
3 |
4 | /**
5 | * The point of this is to make users' profile available on the client side.
6 | * Only the id, username and profile of users will be exposed.
7 | */
8 |
9 | export const AllUsers = new Mongo.Collection('allUsers');
10 |
11 | if (Meteor.isServer) {
12 | // This code only runs on the server
13 | Meteor.publish('allUsers', () => Meteor.users.find({}, { fields: {
14 | _id: 1,
15 | username: 1,
16 | profile: 1,
17 | } }));
18 | }
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # catts
2 | Crowdsourced Annotation Tool for Twitter Sentiment
3 |
4 | ## Get started
5 | Install Meteor.js if you haven't already:
6 | ```bash
7 | curl https://install.meteor.com/ | sh
8 | ```
9 |
10 | Go to [https://apps.twitter.com/](https://apps.twitter.com/) and register an app. Export your key and secret:
11 | ```bash
12 | export CATTS_CONSUMER_KEY="my-app-key"
13 | export CATTS_CONSUMER_SECRET="my-app-secret"
14 | ```
15 | You probably want to put these two lines in you `~/.bashrc` or similar for convenience.
16 |
17 | Then install the project:
18 | ```bash
19 | git clone git@github.com:draperunner/catts.git
20 | cd catts
21 | npm install
22 | meteor
23 | ```
24 |
--------------------------------------------------------------------------------
/imports/ui/components/AccountsUIWrapper/index.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { Template } from 'meteor/templating';
3 | import { Blaze } from 'meteor/blaze';
4 |
5 | export default class AccountsUIWrapper extends Component {
6 | componentDidMount() {
7 | // Use Meteor Blaze to render login buttons
8 | this.view = Blaze.render(Template.loginButtons, this.container);
9 | }
10 | componentWillUnmount() {
11 | // Clean up Blaze view
12 | Blaze.remove(this.view);
13 | }
14 | render() {
15 | // Just render a placeholder container that will be filled in
16 | return { this.container = c; }} />;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/server/tweet-methods/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Returns the most frequent annotation of given type for a tweet.
3 | * For instance, if a tweet has been annotated as 'positive' by two users and 'negative' by one, this method
4 | * will return 'positive'.
5 | */
6 | export const getMostFrequentAnnotation = (tweet, type) => {
7 | const ann = tweet.annotations.aggregated;
8 | const t = type || 'sentiment';
9 |
10 | let mostFreqAnn = null;
11 | let highestFreq = -1;
12 | Object.keys(ann[t] || []).forEach((annotation) => {
13 | if (ann[t][annotation] > highestFreq) {
14 | mostFreqAnn = annotation;
15 | highestFreq = ann[t][annotation];
16 | }
17 | });
18 |
19 | return mostFreqAnn;
20 | };
21 |
--------------------------------------------------------------------------------
/server/api/tweets/twitter.js:
--------------------------------------------------------------------------------
1 | const Twit = require('twit');
2 |
3 | const T = new Twit({
4 | consumer_key: process.env.CATTS_CONSUMER_KEY || '',
5 | consumer_secret: process.env.CATTS_CONSUMER_SECRET || '',
6 | app_only_auth: true,
7 | });
8 |
9 | /**
10 | * Fetch tweet objects from Twitter REST API from a list of tweet ids.
11 | * @param {string[]} tweets An array of tweet ids
12 | * @return {Promise} A promise that might return an array of tweet objects
13 | */
14 | export const statusesLookup = (tweets) => {
15 | const options = {
16 | id: tweets.map(t => t.id_str).join(','),
17 | include_entities: false,
18 | trim_user: true,
19 | };
20 | return T.get('statuses/lookup', options);
21 | };
22 |
--------------------------------------------------------------------------------
/imports/ui/containers/App/index.js:
--------------------------------------------------------------------------------
1 | import React, { PropTypes } from 'react';
2 | import { createContainer } from 'meteor/react-meteor-data';
3 | import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
4 | import Header from '../../components/Header';
5 | import '../../../startup/accounts-config.js';
6 | import './App.css';
7 |
8 | // App component - represents the whole app
9 | const App = props =>
10 |
11 |
12 |
13 |
14 | { props.children }
15 |
16 |
17 | ;
18 |
19 | App.propTypes = {
20 | children: PropTypes.node,
21 | };
22 |
23 | export default createContainer(() => ({
24 | }), App);
25 |
--------------------------------------------------------------------------------
/imports/ui/components/AnnotationCounter/index.js:
--------------------------------------------------------------------------------
1 | import React, { PropTypes } from 'react';
2 | import { Meteor } from 'meteor/meteor';
3 | import { createContainer } from 'meteor/react-meteor-data';
4 |
5 | /**
6 | * Returns a span element containing the number of tweets the logged in user has annotated
7 | */
8 |
9 | const AnnotationCounter = (props) => {
10 | if (!props.currentUser || !props.currentUser.profile || !props.currentUser.profile.annotations) {
11 | return null;
12 | }
13 |
14 | const annotations = props.currentUser.profile.annotations;
15 |
16 | return (
17 |
18 |
19 | { (annotations && annotations.aggregated.count) || 0 }
20 |
21 |
22 | );
23 | };
24 |
25 | AnnotationCounter.propTypes = {
26 | currentUser: PropTypes.object,
27 | };
28 |
29 | export default createContainer(() => ({
30 | currentUser: Meteor.user(),
31 | }), AnnotationCounter);
32 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "catts",
3 | "private": true,
4 | "scripts": {
5 | "start": "meteor run",
6 | "lint": "eslint imports client server"
7 | },
8 | "dependencies": {
9 | "bcrypt": "^1.0.2",
10 | "bootstrap": "^3.3.7",
11 | "material-ui": "^0.16.7",
12 | "meteor-node-stubs": "~0.2.0",
13 | "react": "^15.4.2",
14 | "react-addons-pure-render-mixin": "^15.4.2",
15 | "react-dom": "^15.4.2",
16 | "react-router": "^3.0.1",
17 | "react-skeleton-ui": "^1.5.0",
18 | "react-tap-event-plugin": "^2.0.1",
19 | "twit": "^2.2.5"
20 | },
21 | "devDependencies": {
22 | "babel-eslint": "^7.1.1",
23 | "eslint": "^3.13.1",
24 | "eslint-config-airbnb": "^14.0.0",
25 | "eslint-import-resolver-meteor": "^0.3.4",
26 | "eslint-plugin-import": "^2.2.0",
27 | "eslint-plugin-jsx-a11y": "^3.0.2",
28 | "eslint-plugin-meteor": "^4.0.1",
29 | "eslint-plugin-react": "^6.9.0"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/imports/startup/client/routes.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Router, Route, IndexRoute, browserHistory } from 'react-router';
3 |
4 | // route components
5 | import App from '../../ui/containers/App';
6 | import Welcome from '../../ui/containers/Welcome';
7 | import Highscores from '../../ui/containers/Highscores';
8 | import Guidelines from '../../ui/containers/Guidelines';
9 | import Annotation from '../../ui/containers/Annotation';
10 | import Download from '../../ui/containers/Download';
11 |
12 | export const renderRoutes = () => (
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | );
23 |
--------------------------------------------------------------------------------
/imports/api/tweets.js:
--------------------------------------------------------------------------------
1 | import { Meteor } from 'meteor/meteor';
2 | import { Mongo } from 'meteor/mongo';
3 | import { check } from 'meteor/check';
4 |
5 | export const Tweets = new Mongo.Collection('tweets');
6 |
7 | Meteor.methods({
8 | 'tweets.annotate'(tweetId, annotations) {
9 | check(tweetId, String);
10 | check(annotations, Object);
11 |
12 | // Make sure the user is logged in before saving annotation
13 | if (!this.userId) {
14 | throw new Meteor.Error('not-authorized');
15 | }
16 |
17 | // Push detailed annotation object including user info
18 | // Increment aggregated annotation stats for convenience
19 | const updateObject = {
20 | $push: { 'annotations.detailed': { user: this.userId, annotations } },
21 | $inc: { 'annotations.aggregated.count': 1 },
22 | };
23 |
24 | Object.keys(annotations).forEach((type) => {
25 | updateObject.$inc[`annotations.aggregated.${type}.${annotations[type]}`] = 1;
26 | });
27 |
28 | Tweets.update({ id_str: tweetId }, updateObject);
29 | },
30 | });
31 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "parser": "babel-eslint",
3 | "parserOptions": {
4 | "allowImportExportEverywhere": true
5 | },
6 | "plugins": [
7 | "meteor"
8 | ],
9 | "extends": [
10 | "airbnb",
11 | "plugin:meteor/recommended"
12 | ],
13 | "settings": {
14 | "import/resolver": "meteor"
15 | },
16 | "env": {
17 | "browser": true
18 | },
19 | "rules": {
20 | "react/prop-types": "error",
21 | "comma-dangle": "error",
22 | "arrow-body-style": "warn",
23 | "import/extensions": ["off", "never"],
24 | "import/no-extraneous-dependencies": "off",
25 | "import/prefer-default-export": "off",
26 | "max-len": ["warn", 120],
27 | "no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1, "maxBOF": 1 }],
28 | "no-underscore-dangle": "off",
29 | "no-unused-vars": "warn",
30 | "object-shorthand": ["error", "always"],
31 | "react/forbid-prop-types": "off",
32 | "react/jsx-filename-extension": "off",
33 | "react/jsx-no-bind": "off",
34 | "react/no-unescaped-entities": "off",
35 | "react/prefer-stateless-function": "warn",
36 | "react/require-default-props": "off",
37 | "new-cap": ["error", { "capIsNewExceptions": ["OneOf"] }]
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/imports/ui/containers/Highscores/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Meteor } from 'meteor/meteor';
3 | import { createContainer } from 'meteor/react-meteor-data';
4 | import HighscoreListItem from './HighscoreListItem';
5 |
6 | const getAnnotationCount = (user) => {
7 | if (!user.profile || !user.profile.annotations) return 0;
8 | return user.profile.annotations.aggregated.count;
9 | };
10 |
11 | const Highscores = props => (
12 |
13 |
14 |
Highscores
15 |
16 |
17 | {
18 | props.users.map((user, rank) => (
19 |
25 | ))
26 | }
27 |
28 |
29 | );
30 |
31 | Highscores.propTypes = {
32 | users: React.PropTypes.array,
33 | };
34 |
35 | export default createContainer(() => {
36 | Meteor.subscribe('allUsers');
37 | const users = Meteor.users.find({}, { sort: { 'profile.annotations.aggregated.count': -1 } }).fetch();
38 |
39 | return {
40 | users,
41 | };
42 | }, Highscores);
43 |
--------------------------------------------------------------------------------
/imports/ui/containers/Guidelines/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { createContainer } from 'meteor/react-meteor-data';
3 |
4 | const Guidelines = () => (
5 |
6 |
7 |
Guidelines
8 |
9 |
10 | Determining the correct annotations is not always straight forward. Please refer to these guidelines
11 | if you are unsure.
12 |
13 |
14 |
15 | A positive tweet is a tweet that holds a positive opinion towards something or expresses
16 | a positive feeling. For instance: "I love my iPhone!"
17 |
18 |
19 | A negative tweet is a tweet that holds a negative opinion towards something. For instance:
20 | "I am soooo disappointed!"
21 |
22 |
23 | A neutral tweet is a tweet that seems like it could be written on Wikipedia or in a newspaper,
24 | even though the content might be positive or negative. Here is an example:
25 | "Fed's Bullard: 5% Jobbless Rate Is Close To Full Employment."
26 |
27 |
28 |
29 |
30 | );
31 |
32 | export default createContainer(() => ({
33 | }), Guidelines);
34 |
--------------------------------------------------------------------------------
/imports/ui/components/Header/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Link } from 'react-router';
3 | import AccountsUIWrapper from '../../components/AccountsUIWrapper';
4 | import './Header.css';
5 |
6 | const Header = () => (
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | CATTS
16 |
17 |
18 |
19 | Annotate
20 | Highscores
21 | Download
22 | Guidelines
23 |
24 |
27 |
28 |
29 |
30 | );
31 |
32 | export default Header;
33 |
--------------------------------------------------------------------------------
/imports/ui/containers/Download/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { createContainer } from 'meteor/react-meteor-data';
3 | import FlatButton from 'material-ui/FlatButton';
4 |
5 | const Download = () => (
6 |
7 |
8 |
Download
9 |
10 |
11 |
12 |
13 | Here you can download annotated tweets of the type you want. The text files are in TSV (Tab Separated Values)
14 | format, where the first column contains the tweet ids, and the second column their annotations.
15 |
16 |
17 |
18 |
19 |
20 |
Sentiment Annotations
21 |
22 |
23 |
24 |
25 |
Sarcasm Annotations
26 |
27 |
28 |
29 |
30 |
31 | );
32 |
33 | export default createContainer(() => ({
34 | }), Download);
35 |
--------------------------------------------------------------------------------
/.meteor/packages:
--------------------------------------------------------------------------------
1 | # Meteor packages used by this project, one per line.
2 | # Check this file (and the other files in this directory) into your repository.
3 | #
4 | # 'meteor add' and 'meteor remove' will edit this file for you,
5 | # but you can also edit it by hand.
6 |
7 | meteor-base@1.0.4 # Packages every Meteor app needs to have
8 | mobile-experience@1.0.4 # Packages for a great mobile UX
9 | mongo@1.1.14 # The database Meteor supports right now
10 | blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views
11 | reactive-var@1.0.11 # Reactive variable for tracker
12 | jquery@1.11.10 # Helpful client-side library
13 | tracker@1.1.1 # Meteor's client-side reactive programming library
14 |
15 | standard-minifier-css@1.3.2 # CSS minifier run for production mode
16 | standard-minifier-js@1.2.1 # JS minifier run for production mode
17 | es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers.
18 | ecmascript@0.6.1 # Enable ECMAScript2015+ syntax in app code
19 | shell-server@0.2.1 # Server-side component of the `meteor shell` command
20 |
21 | insecure@1.0.7 # Allow all DB writes from clients (for prototyping)
22 | react-meteor-data
23 | accounts-ui@1.1.9
24 | accounts-password@1.3.3
25 | nimble:restivus
26 |
--------------------------------------------------------------------------------
/imports/api/user.js:
--------------------------------------------------------------------------------
1 | import { Meteor } from 'meteor/meteor';
2 | import { Mongo } from 'meteor/mongo';
3 | import { check } from 'meteor/check';
4 |
5 | /**
6 | * This file contains method for updating a single user
7 | */
8 |
9 | export const User = new Mongo.Collection('user');
10 |
11 | if (Meteor.isServer) {
12 | // This code only runs on the server
13 | Meteor.publish('user', () => Meteor.users.find({ _id: this.userId }, { fields: {
14 | _id: 1,
15 | username: 1,
16 | profile: 1,
17 | } }));
18 | }
19 |
20 | Meteor.methods({
21 | 'user.addAnnotation'(tweetId, annotations) {
22 | check(tweetId, String);
23 | check(annotations, Object);
24 |
25 | // Make sure the user is logged in before inserting a wishlist
26 | if (!this.userId) {
27 | throw new Meteor.Error('not-authorized');
28 | }
29 |
30 | // Push detailed annotation object
31 | // Increment aggregated annotation stats for convenience
32 | const updateObject = {
33 | $push: { 'profile.annotations.detailed': { tweetId, annotations } },
34 | $inc: { 'profile.annotations.aggregated.count': 1 },
35 | };
36 |
37 | Object.keys(annotations).forEach((type) => {
38 | updateObject.$inc[`profile.annotations.aggregated.${type}.${annotations[type]}`] = 1;
39 | });
40 |
41 | Meteor.users.update({ _id: this.userId }, updateObject);
42 | },
43 | });
44 |
--------------------------------------------------------------------------------
/imports/ui/containers/Welcome/index.js:
--------------------------------------------------------------------------------
1 | import React, { PropTypes } from 'react';
2 | import { Meteor } from 'meteor/meteor';
3 | import { createContainer } from 'meteor/react-meteor-data';
4 | import { Link } from 'react-router';
5 | import RaisedButton from 'material-ui/RaisedButton';
6 |
7 | const Welcome = () => (
8 |
9 |
10 |
Welcome!
11 |
12 | CATTS is an abbrevation for Crowdsourced Annotation Tool for Twitter Sentiment. Its goal is to generate
13 | a manually annotated dataset for use in Twitter classification tasks, like sentiment or sarcasm classification.
14 | By using CATTS, you contribute to research in the fields of Natural Language Processing and Artificial
15 | Intelligence.
16 |
17 |
18 | As tweets are annotated, the data set is instantly updated and available for download on
19 | the Download page. Both text and JSON formats are available.
20 |
21 |
22 | Please see the Guidelines page for instructions on how to annotate the tweets.
23 |
24 |
25 |
26 |
27 | );
28 |
29 | Welcome.propTypes = {
30 | currentUser: PropTypes.object,
31 | };
32 |
33 | export default createContainer(() => ({
34 | currentUser: Meteor.user(),
35 | }), Welcome);
36 |
--------------------------------------------------------------------------------
/.meteor/versions:
--------------------------------------------------------------------------------
1 | accounts-base@1.2.14
2 | accounts-password@1.3.3
3 | accounts-ui@1.1.9
4 | accounts-ui-unstyled@1.1.13
5 | allow-deny@1.0.5
6 | autoupdate@1.3.12
7 | babel-compiler@6.13.0
8 | babel-runtime@1.0.1
9 | base64@1.0.10
10 | binary-heap@1.0.10
11 | blaze@2.3.0
12 | blaze-html-templates@1.1.0
13 | blaze-tools@1.0.10
14 | boilerplate-generator@1.0.11
15 | caching-compiler@1.1.9
16 | caching-html-compiler@1.1.0
17 | callback-hook@1.0.10
18 | check@1.2.4
19 | coffeescript@1.11.1_4
20 | ddp@1.2.5
21 | ddp-client@1.3.2
22 | ddp-common@1.2.8
23 | ddp-rate-limiter@1.0.6
24 | ddp-server@1.3.12
25 | deps@1.0.12
26 | diff-sequence@1.0.7
27 | ecmascript@0.6.1
28 | ecmascript-runtime@0.3.15
29 | ejson@1.0.13
30 | email@1.1.18
31 | es5-shim@4.6.15
32 | fastclick@1.0.13
33 | geojson-utils@1.0.10
34 | hot-code-push@1.0.4
35 | html-tools@1.0.11
36 | htmljs@1.0.11
37 | http@1.2.10
38 | id-map@1.0.9
39 | insecure@1.0.7
40 | jquery@1.11.10
41 | launch-screen@1.1.0
42 | less@2.7.9
43 | livedata@1.0.18
44 | localstorage@1.0.12
45 | logging@1.1.16
46 | meteor@1.6.0
47 | meteor-base@1.0.4
48 | minifier-css@1.2.16
49 | minifier-js@1.2.17
50 | minimongo@1.0.19
51 | mobile-experience@1.0.4
52 | mobile-status-bar@1.0.13
53 | modules@0.7.7
54 | modules-runtime@0.7.8
55 | mongo@1.1.14
56 | mongo-id@1.0.6
57 | nimble:restivus@0.8.12
58 | npm-bcrypt@0.9.2
59 | npm-mongo@2.2.16_1
60 | observe-sequence@1.0.14
61 | ordered-dict@1.0.9
62 | promise@0.8.8
63 | random@1.0.10
64 | rate-limit@1.0.6
65 | react-meteor-data@0.2.9
66 | reactive-dict@1.1.8
67 | reactive-var@1.0.11
68 | reload@1.1.11
69 | retry@1.0.9
70 | routepolicy@1.0.12
71 | service-configuration@1.0.11
72 | session@1.1.7
73 | sha@1.0.9
74 | shell-server@0.2.1
75 | simple:json-routes@2.1.0
76 | spacebars@1.0.13
77 | spacebars-compiler@1.1.0
78 | srp@1.0.10
79 | standard-minifier-css@1.3.3
80 | standard-minifier-js@1.2.2
81 | templating@1.3.0
82 | templating-compiler@1.3.0
83 | templating-runtime@1.3.0
84 | templating-tools@1.1.0
85 | tmeasday:check-npm-versions@0.3.1
86 | tracker@1.1.1
87 | ui@1.0.12
88 | underscore@1.0.10
89 | url@1.0.11
90 | webapp@1.3.12
91 | webapp-hashing@1.0.9
92 |
--------------------------------------------------------------------------------
/server/api/tweets/index.js:
--------------------------------------------------------------------------------
1 | import { Meteor } from 'meteor/meteor';
2 | import { Restivus } from 'meteor/nimble:restivus';
3 | import { Tweets } from '../../../imports/api/tweets';
4 | import { getMostFrequentAnnotation } from '../../tweet-methods';
5 | import { statusesLookup } from './twitter';
6 |
7 | // This will only expose tweets that are not annotated by current user
8 | Meteor.publish('tweets', function tweetsPublish() {
9 | const tweets = Tweets.find({ 'annotations.detailed.user': { $ne: this.userId } }, { limit: 40 });
10 | const self = this;
11 | statusesLookup(tweets)
12 | .then((fullTweets) => {
13 | if (fullTweets.data.errors) return;
14 |
15 | fullTweets.data.forEach((t) => {
16 | self.added('tweets', t.id_str, { id_str: t.id_str, text: t.text });
17 | });
18 | self.ready();
19 | });
20 | });
21 |
22 | // Global API configuration
23 | const Api = new Restivus({
24 | useDefaultAuth: true,
25 | prettyJson: true,
26 | });
27 |
28 | /**
29 | * Creates a TSV-formatted string from an array of tweets and an annotation type.
30 | * Each line will contain a tweet's id and its most frequent annotation of the given type
31 | * @param {string[]} tweets An array of tweet ids to fetch annotations for
32 | * @param {string} type The annotation type. For instance 'sentiment' or 'sarcasm'
33 | * @return {string} A string representing the whole TSV-formatted file
34 | */
35 | const createTxt = (tweets, type) => tweets
36 | .map(t => `${t.id_str}\t${getMostFrequentAnnotation(t, type)}`)
37 | .filter(line => line.slice(line.length - 4) !== 'null')
38 | .join('\n');
39 |
40 | // Maps to: /api/tweets
41 | Api.addRoute('tweets', { authRequired: false }, {
42 | get() {
43 | const format = this.queryParams.format && this.queryParams.format.toLowerCase();
44 | const type = this.queryParams.type && this.queryParams.type.toLowerCase();
45 | const tweets = Tweets
46 | .find({ annotations: { $exists: true } }, { fields: { id_str: 1, 'annotations.aggregated': 1 } })
47 | .fetch();
48 |
49 | if (format === 'json') {
50 | return tweets;
51 | }
52 |
53 | return {
54 | headers: {
55 | 'Content-Type': 'text/plain',
56 | },
57 | body: createTxt(tweets, type),
58 | };
59 | },
60 | });
61 |
--------------------------------------------------------------------------------
/imports/ui/containers/Annotation/index.js:
--------------------------------------------------------------------------------
1 | import React, { PropTypes } from 'react';
2 | import { Meteor } from 'meteor/meteor';
3 | import { createContainer } from 'meteor/react-meteor-data';
4 | import RaisedButton from 'material-ui/RaisedButton';
5 | import { RadioButton, RadioButtonGroup } from 'material-ui/RadioButton';
6 | import { Tweets } from '../../../api/tweets';
7 | import AnnotationCounter from '../../components/AnnotationCounter';
8 |
9 | class Annotation extends React.Component {
10 |
11 | constructor() {
12 | super();
13 | this.state = {
14 | tweets: [],
15 | doneTweets: [],
16 | currentTweet: null,
17 | annotations: {},
18 | };
19 | }
20 |
21 | componentWillReceiveProps(nextProps) {
22 | if (!this.state.tweets.length || this.state.tweets.length < 3) {
23 | const { tweets, doneTweets, currentTweet } = this.state;
24 |
25 | const processedTweets = [...tweets, ...doneTweets];
26 | if (currentTweet) processedTweets.push(currentTweet);
27 |
28 | // Filter new tweets to avoid duplicates
29 | const newTweets = nextProps.tweets
30 | .filter(newTweet => processedTweets.map(oldTweet => oldTweet.id_str).indexOf(newTweet.id_str) < 0);
31 |
32 | const newState = {
33 | tweets: [...tweets, ...newTweets],
34 | };
35 |
36 | // If we're loading tweets for the very first time, pop one to become the currentTweet
37 | if (this.state.tweets.length === 0 && this.state.doneTweets.length === 0) {
38 | newState.tweets = newState.tweets.slice(1);
39 | newState.currentTweet = nextProps.tweets[0];
40 | }
41 |
42 | this.setState(newState);
43 | }
44 | }
45 |
46 | next() {
47 | Meteor.call('tweets.annotate', this.state.currentTweet._id, this.state.annotations);
48 | Meteor.call('user.addAnnotation', this.state.currentTweet._id, this.state.annotations);
49 | const newTweets = this.state.tweets.slice();
50 | const newDoneTweets = [...this.state.doneTweets, this.state.currentTweet];
51 | const newCurrentTweet = newTweets.shift();
52 | this.setState({
53 | tweets: newTweets,
54 | doneTweets: newDoneTweets,
55 | currentTweet: newCurrentTweet,
56 | annotations: {},
57 | });
58 |
59 | // Hack to reload the subscription to 'tweets'
60 | if (this.state.tweets.length < 10) {
61 | Meteor.subscribe('tweets');
62 | }
63 | }
64 |
65 | annotate(type, annotation) {
66 | const annotations = { ...this.state.annotations };
67 | annotations[type] = annotation;
68 |
69 | this.setState({
70 | annotations,
71 | });
72 | }
73 |
74 | render() {
75 | if (!this.props.currentUser) {
76 | return ;
77 | }
78 |
79 | const tweet = this.state.currentTweet;
80 |
81 | const title = 'Annotation';
82 |
83 | if (!this.state.tweets.length && this.state.doneTweets.length > 0) {
84 | return (
85 |
86 |
87 |
{title}
88 | No available tweets! You must have annotated them all. Great job!
89 |
90 |
91 | );
92 | } else if (!this.state.tweets.length && this.state.doneTweets.length === 0) {
93 | return (
94 |
95 |
96 |
{title}
97 | Loading tweets...
98 |
99 |
100 | );
101 | }
102 |
103 | return (
104 |
105 |
106 |
107 |
{title}
108 |
{ tweet ? {tweet.text}
: null }
109 |
110 |
111 |
112 |
113 |
Sentiment Annotation
114 | this.annotate('sentiment', e.target.value)}
118 | >
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
Sarcasm Annotation
127 | this.annotate('sarcasm', e.target.value)}
131 | >
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 | this.next()}
143 | >
144 | Next
145 |
146 |
147 |
152 |
153 | );
154 | }
155 | }
156 |
157 | Annotation.propTypes = {
158 | currentUser: PropTypes.object,
159 | };
160 |
161 | export default createContainer(() => {
162 | // This will only return tweets that are not annotated by current user
163 | Meteor.subscribe('tweets');
164 |
165 | const tweets = Tweets.find().fetch();
166 |
167 | return {
168 | currentUser: Meteor.user(),
169 | tweets,
170 | };
171 | }, Annotation);
172 |
--------------------------------------------------------------------------------
/server/fixtures-999.js:
--------------------------------------------------------------------------------
1 | const fixtures = [
2 | { id_str: '785912300603641856' },
3 | { id_str: '785912300591017985' },
4 | { id_str: '785912300590993409' },
5 | { id_str: '785912300582604802' },
6 | { id_str: '785912300569894912' },
7 | { id_str: '785912300570107904' },
8 | { id_str: '785912300599386112' },
9 | { id_str: '785912300603453440' },
10 | { id_str: '785912300578504708' },
11 | { id_str: '785912304768520192' },
12 | { id_str: '785912304764391424' },
13 | { id_str: '785912304789495809' },
14 | { id_str: '785912304781103104' },
15 | { id_str: '785912304768544769' },
16 | { id_str: '785912304772653058' },
17 | { id_str: '785912304793710592' },
18 | { id_str: '785912304780976129' },
19 | { id_str: '785912304797880325' },
20 | { id_str: '785912304793690112' },
21 | { id_str: '785912304764391425' },
22 | { id_str: '785912304789434368' },
23 | { id_str: '785912304772624384' },
24 | { id_str: '785912304793710593' },
25 | { id_str: '785912308958633984' },
26 | { id_str: '785912308979601408' },
27 | { id_str: '785912308983791617' },
28 | { id_str: '785912308979478528' },
29 | { id_str: '785912308996317184' },
30 | { id_str: '785912308962734080' },
31 | { id_str: '785912308987899905' },
32 | { id_str: '785912308983881728' },
33 | { id_str: '785912313173929987' },
34 | { id_str: '785912313173905409' },
35 | { id_str: '785912313169739776' },
36 | { id_str: '785912313190748164' },
37 | { id_str: '785912313161199616' },
38 | { id_str: '785912313165574144' },
39 | { id_str: '785912313157070848' },
40 | { id_str: '785912313173843968' },
41 | { id_str: '785912313178042368' },
42 | { id_str: '785912317359849474' },
43 | { id_str: '785912317347323904' },
44 | { id_str: '785912317372428288' },
45 | { id_str: '785912317372469248' },
46 | { id_str: '785912317380730880' },
47 | { id_str: '785912317384937472' },
48 | { id_str: '785912317359878144' },
49 | { id_str: '785912317347147776' },
50 | { id_str: '785912317363892224' },
51 | { id_str: '785912317359886336' },
52 | { id_str: '785912321566703617' },
53 | { id_str: '785912321549926400' },
54 | { id_str: '785912321558319104' },
55 | { id_str: '785912321558413313' },
56 | { id_str: '785912325756903425' },
57 | { id_str: '785912325769420800' },
58 | { id_str: '785912325744144385' },
59 | { id_str: '785912325744189440' },
60 | { id_str: '785912325756755968' },
61 | { id_str: '785912325756813313' },
62 | { id_str: '785912325744103424' },
63 | { id_str: '785912325761105920' },
64 | { id_str: '785912325748330497' },
65 | { id_str: '785912325769265153' },
66 | { id_str: '785912325760950272' },
67 | { id_str: '785912325740040192' },
68 | { id_str: '785912325773496320' },
69 | { id_str: '785912329938558976' },
70 | { id_str: '785912329930051584' },
71 | { id_str: '785912329963732992' },
72 | { id_str: '785912329934209024' },
73 | { id_str: '785912329955217408' },
74 | { id_str: '785912329967849473' },
75 | { id_str: '785912334137102336' },
76 | { id_str: '785912334145519617' },
77 | { id_str: '785912334149574656' },
78 | { id_str: '785912334149570560' },
79 | { id_str: '785912334124449792' },
80 | { id_str: '785912338327097344' },
81 | { id_str: '785912338343927809' },
82 | { id_str: '785912338339758080' },
83 | { id_str: '785912338356375553' },
84 | { id_str: '785912338322976768' },
85 | { id_str: '785912338356510720' },
86 | { id_str: '785912338356379648' },
87 | { id_str: '785912338343792640' },
88 | { id_str: '785912342517252097' },
89 | { id_str: '785912342542442496' },
90 | { id_str: '785912342538104832' },
91 | { id_str: '785912342542487553' },
92 | { id_str: '785912342517350401' },
93 | { id_str: '785912342513000448' },
94 | { id_str: '785912346707369984' },
95 | { id_str: '785912346715754496' },
96 | { id_str: '785912346724147200' },
97 | { id_str: '785912346724143105' },
98 | { id_str: '785912346745208832' },
99 | { id_str: '785912346744987648' },
100 | { id_str: '785912346740916228' },
101 | { id_str: '785912346745069568' },
102 | { id_str: '785912346745024513' },
103 | { id_str: '785912350922670081' },
104 | { id_str: '785912350931095554' },
105 | { id_str: '785912350905860098' },
106 | { id_str: '785912350926774272' },
107 | { id_str: '785912350905729024' },
108 | { id_str: '785912350922698752' },
109 | { id_str: '785912350914277376' },
110 | { id_str: '785912350935179264' },
111 | { id_str: '785912350901764096' },
112 | { id_str: '785912350914121728' },
113 | { id_str: '785912355095998464' },
114 | { id_str: '785912355121090560' },
115 | { id_str: '785912355125235712' },
116 | { id_str: '785912355117002752' },
117 | { id_str: '785912355104419840' },
118 | { id_str: '785912359323889664' },
119 | { id_str: '785912359311126528' },
120 | { id_str: '785912359315447813' },
121 | { id_str: '785912359315382272' },
122 | { id_str: '785912363484585984' },
123 | { id_str: '785912363505508352' },
124 | { id_str: '785912363518005248' },
125 | { id_str: '785912363497119744' },
126 | { id_str: '785912363492913152' },
127 | { id_str: '785912363518046208' },
128 | { id_str: '785912300603641856' },
129 | { id_str: '785912300591017985' },
130 | { id_str: '785912300590993409' },
131 | { id_str: '785912300582604802' },
132 | { id_str: '785912300569894912' },
133 | { id_str: '785912300570107904' },
134 | { id_str: '785912300599386112' },
135 | { id_str: '785912300603453440' },
136 | { id_str: '785912300578504708' },
137 | { id_str: '785912304768520192' },
138 | { id_str: '785912304764391424' },
139 | { id_str: '785912304789495809' },
140 | { id_str: '785912304781103104' },
141 | { id_str: '785912304768544769' },
142 | { id_str: '785912304772653058' },
143 | { id_str: '785912304793710592' },
144 | { id_str: '785912304780976129' },
145 | { id_str: '785912304797880325' },
146 | { id_str: '785912304793690112' },
147 | { id_str: '785912304764391425' },
148 | { id_str: '785912304789434368' },
149 | { id_str: '785912304772624384' },
150 | { id_str: '785912363493027841' },
151 | { id_str: '785912359315447808' },
152 | { id_str: '785912367708241920' },
153 | { id_str: '785912367704117248' },
154 | { id_str: '785912367699726337' },
155 | { id_str: '785912367678750720' },
156 | { id_str: '785912367699800064' },
157 | { id_str: '785912367695540224' },
158 | { id_str: '785912367708246016' },
159 | { id_str: '785912367678885888' },
160 | { id_str: '785912371881672704' },
161 | { id_str: '785912371902636032' },
162 | { id_str: '785912371906830336' },
163 | { id_str: '785912371911004160' },
164 | { id_str: '785912371898421249' },
165 | { id_str: '785912371877294080' },
166 | { id_str: '785912376084299776' },
167 | { id_str: '785912376088416256' },
168 | { id_str: '785912376096854016' },
169 | { id_str: '785912376067436544' },
170 | { id_str: '785912376067362816' },
171 | { id_str: '785912376096731136' },
172 | { id_str: '785912376084209664' },
173 | { id_str: '785912380266057728' },
174 | { id_str: '785912380274323457' },
175 | { id_str: '785912380278444032' },
176 | { id_str: '785912380270129153' },
177 | { id_str: '785912380287029248' },
178 | { id_str: '785912380299603969' },
179 | { id_str: '785912380291100672' },
180 | { id_str: '785912380278484992' },
181 | { id_str: '785912384481132544' },
182 | { id_str: '785912384493793280' },
183 | { id_str: '785912384485404672' },
184 | { id_str: '785912384493907969' },
185 | { id_str: '785912384481325056' },
186 | { id_str: '785912384456052737' },
187 | { id_str: '785912388654465024' },
188 | { id_str: '785912388688105472' },
189 | { id_str: '785912388662898689' },
190 | { id_str: '785912388650463234' },
191 | { id_str: '785912388688248832' },
192 | { id_str: '785912388679716864' },
193 | { id_str: '785912388654477313' },
194 | { id_str: '785912388683833344' },
195 | { id_str: '785912392878329858' },
196 | { id_str: '785912392848990209' },
197 | { id_str: '785912392848924673' },
198 | { id_str: '785912392844587008' },
199 | { id_str: '785912392861429760' },
200 | { id_str: '785912392878215168' },
201 | { id_str: '785912392853049344' },
202 | { id_str: '785912392882462720' },
203 | { id_str: '785912392861491200' },
204 | { id_str: '785912397068369920' },
205 | { id_str: '785912397047402497' },
206 | { id_str: '785912397051617285' },
207 | { id_str: '785912397076664320' },
208 | { id_str: '785912397072572416' },
209 | { id_str: '785912397064052736' },
210 | { id_str: '785912397047398400' },
211 | { id_str: '785912397051498496' },
212 | { id_str: '785912397039009793' },
213 | { id_str: '785912397064048640' },
214 | { id_str: '785912397051682816' },
215 | { id_str: '785912397076713472' },
216 | { id_str: '785912401258479616' },
217 | { id_str: '785912401245904896' },
218 | { id_str: '785912401262743552' },
219 | { id_str: '785912401250115590' },
220 | { id_str: '785912401262673921' },
221 | { id_str: '785912401271087104' },
222 | { id_str: '785912401233195008' },
223 | { id_str: '785912401266774016' },
224 | { id_str: '785912401258577920' },
225 | { id_str: '785912405440270336' },
226 | { id_str: '785912405452783616' },
227 | { id_str: '785912405444403200' },
228 | { id_str: '785912405431754753' },
229 | { id_str: '785912405452808192' },
230 | { id_str: '785912405465366530' },
231 | { id_str: '785912405465235456' },
232 | { id_str: '785912405436010500' },
233 | { id_str: '785912405444349952' },
234 | { id_str: '785912405456936960' },
235 | { id_str: '785912405444354048' },
236 | { id_str: '785912405461196800' },
237 | { id_str: '785912405435887616' },
238 | { id_str: '785912409659695104' },
239 | { id_str: '785912409626148865' },
240 | { id_str: '785912409659760640' },
241 | { id_str: '785912409630408704' },
242 | { id_str: '785912409659629568' },
243 | { id_str: '785912409655418880' },
244 | { id_str: '785912409634377728' },
245 | { id_str: '785912409655357440' },
246 | { id_str: '785912409634447360' },
247 | { id_str: '785912409659539457' },
248 | { id_str: '785912409655484416' },
249 | { id_str: '785912413854072832' },
250 | { id_str: '785912413824561152' },
251 | { id_str: '785912413824573440' },
252 | { id_str: '785912413824487424' },
253 | { id_str: '785912413845491712' },
254 | { id_str: '785912413832957957' },
255 | { id_str: '785912413824614400' },
256 | { id_str: '785912413828898816' },
257 | { id_str: '785912413854044160' },
258 | { id_str: '785912418014748672' },
259 | { id_str: '785912418018947072' },
260 | { id_str: '785912418014814208' },
261 | { id_str: '785912418010554369' },
262 | { id_str: '785912418018861056' },
263 | { id_str: '785912418039767040' },
264 | { id_str: '785912418035785728' },
265 | { id_str: '785912422238392320' },
266 | { id_str: '785912422209118208' },
267 | { id_str: '785912422242529280' },
268 | { id_str: '785912422229958656' },
269 | { id_str: '785912422209032195' },
270 | { id_str: '785912426407555072' },
271 | { id_str: '785912426432790528' },
272 | { id_str: '785912426399137798' },
273 | { id_str: '785912426411790336' },
274 | { id_str: '785912426411679744' },
275 | { id_str: '785912426428497924' },
276 | { id_str: '785912426407596032' },
277 | { id_str: '785912426411745280' },
278 | { id_str: '785912426420023296' },
279 | { id_str: '785912430614474753' },
280 | { id_str: '785912430601777152' },
281 | { id_str: '785912430605983744' },
282 | { id_str: '785912430601891840' },
283 | { id_str: '785912430605893632' },
284 | { id_str: '785912430618562560' },
285 | { id_str: '785912430627020800' },
286 | { id_str: '785912430610161664' },
287 | { id_str: '785912430605897728' },
288 | { id_str: '785912430614368256' },
289 | { id_str: '785912434812788736' },
290 | { id_str: '785912434808786945' },
291 | { id_str: '785912434821324800' },
292 | { id_str: '785912438994579457' },
293 | { id_str: '785912438986158080' },
294 | { id_str: '785912439011287041' },
295 | { id_str: '785912439015665664' },
296 | { id_str: '785912443176415232' },
297 | { id_str: '785912443201617921' },
298 | { id_str: '785912443209850881' },
299 | { id_str: '785912443209785344' },
300 | { id_str: '785912443188936709' },
301 | { id_str: '785912443180453888' },
302 | { id_str: '785912447379116032' },
303 | { id_str: '785912447408476160' },
304 | { id_str: '785912447379046404' },
305 | { id_str: '785912447404081152' },
306 | { id_str: '785912447399899137' },
307 | { id_str: '785912447383244800' },
308 | { id_str: '785912447383199745' },
309 | { id_str: '785912447383199746' },
310 | { id_str: '785912451569164289' },
311 | { id_str: '785912451594203136' },
312 | { id_str: '785912451590160386' },
313 | { id_str: '785912451577413633' },
314 | { id_str: '785912451573350400' },
315 | { id_str: '785912451594346496' },
316 | { id_str: '785912451577413632' },
317 | { id_str: '785912455797022720' },
318 | { id_str: '785912455780241408' },
319 | { id_str: '785912455792918529' },
320 | { id_str: '785912455767654400' },
321 | { id_str: '785912455771856896' },
322 | { id_str: '785912455775911936' },
323 | { id_str: '785912455763406849' },
324 | { id_str: '785912455797112832' },
325 | { id_str: '785912455759294464' },
326 | { id_str: '785912455792828416' },
327 | { id_str: '785912455763374080' },
328 | { id_str: '785912455767658496' },
329 | { id_str: '785912455767687168' },
330 | { id_str: '785912455775920128' },
331 | { id_str: '785912455763402752' },
332 | { id_str: '785912451569025024' },
333 | { id_str: '785912459957768192' },
334 | { id_str: '785912459957833728' },
335 | { id_str: '785912459961958400' },
336 | { id_str: '785912459978743808' },
337 | { id_str: '785912459953577984' },
338 | { id_str: '785912459970301953' },
339 | { id_str: '785912459974410240' },
340 | { id_str: '785912459953639424' },
341 | { id_str: '785912459970301954' },
342 | { id_str: '785912464147906560' },
343 | { id_str: '785912464147943424' },
344 | { id_str: '785912464181432320' },
345 | { id_str: '785912464151945217' },
346 | { id_str: '785912464160333824' },
347 | { id_str: '785912464172953600' },
348 | { id_str: '785912464177111040' },
349 | { id_str: '785912468346331136' },
350 | { id_str: '785912468363247616' },
351 | { id_str: '785912468371542016' },
352 | { id_str: '785912472549064709' },
353 | { id_str: '785912472549154816' },
354 | { id_str: '785912476751630337' },
355 | { id_str: '785912476739178497' },
356 | { id_str: '785912476755951616' },
357 | { id_str: '785912476756021249' },
358 | { id_str: '785912480962838528' },
359 | { id_str: '785912480946122754' },
360 | { id_str: '785912480924958720' },
361 | { id_str: '785912480933433344' },
362 | { id_str: '785912480958586880' },
363 | { id_str: '785912480958525440' },
364 | { id_str: '785912480954318848' },
365 | { id_str: '785912480933384192' },
366 | { id_str: '785912480950288389' },
367 | { id_str: '785912485152948228' },
368 | { id_str: '785912485131980800' },
369 | { id_str: '785912485152972801' },
370 | { id_str: '785912485127811072' },
371 | { id_str: '785912485144621056' },
372 | { id_str: '785912485119352834' },
373 | { id_str: '785912485140324356' },
374 | { id_str: '785912485131923456' },
375 | { id_str: '785912485152952320' },
376 | { id_str: '785912485119340544' },
377 | { id_str: '785912485148815360' },
378 | { id_str: '785912485131890689' },
379 | { id_str: '785912485127786496' },
380 | { id_str: '785912489313722368' },
381 | { id_str: '785912489322184704' },
382 | { id_str: '785912489334759424' },
383 | { id_str: '785912489342971904' },
384 | { id_str: '785912489347276800' },
385 | { id_str: '785912489347121152' },
386 | { id_str: '785912489351536644' },
387 | { id_str: '785912493520465920' },
388 | { id_str: '785912493537460224' },
389 | { id_str: '785912493533122561' },
390 | { id_str: '785912493516259329' },
391 | { id_str: '785912493541588992' },
392 | { id_str: '785912493507944448' },
393 | { id_str: '785912493516263424' },
394 | { id_str: '785912493516419077' },
395 | { id_str: '785912493545705472' },
396 | { id_str: '785912497710698496' },
397 | { id_str: '785912497731538944' },
398 | { id_str: '785912497731764224' },
399 | { id_str: '785912497710641152' },
400 | { id_str: '785912497731608577' },
401 | { id_str: '785912497739927552' },
402 | { id_str: '785912497710567424' },
403 | { id_str: '785912497739927553' },
404 | { id_str: '785912497739927554' },
405 | { id_str: '785912497702219776' },
406 | { id_str: '785912501917585408' },
407 | { id_str: '785912501921730560' },
408 | { id_str: '785912501934317568' },
409 | { id_str: '785912501913268224' },
410 | { id_str: '785912501921656833' },
411 | { id_str: '785912506103595008' },
412 | { id_str: '785912506107781120' },
413 | { id_str: '785912506090917888' },
414 | { id_str: '785912506120273920' },
415 | { id_str: '785912506099183616' },
416 | { id_str: '785912506090983424' },
417 | { id_str: '785912506090856448' },
418 | { id_str: '785912506120155136' },
419 | { id_str: '785912506111762432' },
420 | { id_str: '785912510306189312' },
421 | { id_str: '785912510293667845' },
422 | { id_str: '785912510293639168' },
423 | { id_str: '785912510289416192' },
424 | { id_str: '785912510289317888' },
425 | { id_str: '785912510297669632' },
426 | { id_str: '785912510314606593' },
427 | { id_str: '785912514487914500' },
428 | { id_str: '785912514513145856' },
429 | { id_str: '785912514492137472' },
430 | { id_str: '785912514508828672' },
431 | { id_str: '785912514492010496' },
432 | { id_str: '785912514512990208' },
433 | { id_str: '785912518673915904' },
434 | { id_str: '785912518686507008' },
435 | { id_str: '785912518703276032' },
436 | { id_str: '785912518711599104' },
437 | { id_str: '785912518698999809' },
438 | { id_str: '785912518682312704' },
439 | { id_str: '785912518711644160' },
440 | { id_str: '785912518686277632' },
441 | { id_str: '785912518699053056' },
442 | { id_str: '785912522868158465' },
443 | { id_str: '785912522897522689' },
444 | { id_str: '785912522901590017' },
445 | { id_str: '785912527087669249' },
446 | { id_str: '785912527091802116' },
447 | { id_str: '785912527066628096' },
448 | { id_str: '785912527087607809' },
449 | { id_str: '785912527070769152' },
450 | { id_str: '785912527079235584' },
451 | { id_str: '785912527083413508' },
452 | { id_str: '785912527087661056' },
453 | { id_str: '785912527087632384' },
454 | { id_str: '785912527083347972' },
455 | { id_str: '785912531260932097' },
456 | { id_str: '785912531286130688' },
457 | { id_str: '785912531269382144' },
458 | { id_str: '785912531281932289' },
459 | { id_str: '785912531290165248' },
460 | { id_str: '785912535488880641' },
461 | { id_str: '785912535484694528' },
462 | { id_str: '785912535472082944' },
463 | { id_str: '785912535484596226' },
464 | { id_str: '785912535480283138' },
465 | { id_str: '785912535476084736' },
466 | { id_str: '785912535480283139' },
467 | { id_str: '785912535463628800' },
468 | { id_str: '785912535488671744' },
469 | { id_str: '785912539645444096' },
470 | { id_str: '785912539678855169' },
471 | { id_str: '785912539662069760' },
472 | { id_str: '785912539649548289' },
473 | { id_str: '785912539657875456' },
474 | { id_str: '785912539662000128' },
475 | { id_str: '785912539683037184' },
476 | { id_str: '785912543852232704' },
477 | { id_str: '785912543848046592' },
478 | { id_str: '785912548033986561' },
479 | { id_str: '785912548067577856' },
480 | { id_str: '785912548042215425' },
481 | { id_str: '785912548067598336' },
482 | { id_str: '785912548058992640' },
483 | { id_str: '785912548042248193' },
484 | { id_str: '785912548050829312' },
485 | { id_str: '785912548058992641' },
486 | { id_str: '785912548046544900' },
487 | { id_str: '785912552245096449' },
488 | { id_str: '785912552236605440' },
489 | { id_str: '785912552228261888' },
490 | { id_str: '785912552244912128' },
491 | { id_str: '785912552266104839' },
492 | { id_str: '785912552261758976' },
493 | { id_str: '785912556430950400' },
494 | { id_str: '785912556451921921' },
495 | { id_str: '785912556451794944' },
496 | { id_str: '785912556439220224' },
497 | { id_str: '785912556426854400' },
498 | { id_str: '785912556443414529' },
499 | { id_str: '785912556451803136' },
500 | { id_str: '785912556451880960' },
501 | { id_str: '785912556447608832' },
502 | { id_str: '785912556439216128' },
503 | { id_str: '785912556451991552' },
504 | { id_str: '785912560629456897' },
505 | { id_str: '785912560650452993' },
506 | { id_str: '785912560621129728' },
507 | { id_str: '785912560625168385' },
508 | { id_str: '785912560641904640' },
509 | { id_str: '785912560654573568' },
510 | { id_str: '785912560650366976' },
511 | { id_str: '785912560646324225' },
512 | { id_str: '785912560646254592' },
513 | { id_str: '785912560642064384' },
514 | { id_str: '785912564849016834' },
515 | { id_str: '785912564848861186' },
516 | { id_str: '785912564815323136' },
517 | { id_str: '785912564836364288' },
518 | { id_str: '785912564819431424' },
519 | { id_str: '785912564840562689' },
520 | { id_str: '785912569005498368' },
521 | { id_str: '785912569022251009' },
522 | { id_str: '785912569013862400' },
523 | { id_str: '785912569018146816' },
524 | { id_str: '785912569034866688' },
525 | { id_str: '785912569039028224' },
526 | { id_str: '785912569034862596' },
527 | { id_str: '785912569013932032' },
528 | { id_str: '785912569013821441' },
529 | { id_str: '785912569026449408' },
530 | { id_str: '785912569026318336' },
531 | { id_str: '785912573233393664' },
532 | { id_str: '785912573216616450' },
533 | { id_str: '785912573237481472' },
534 | { id_str: '785912573237469184' },
535 | { id_str: '785912573220810752' },
536 | { id_str: '785912573203853313' },
537 | { id_str: '785912573208174596' },
538 | { id_str: '785912577419276288' },
539 | { id_str: '785912577394114564' },
540 | { id_str: '785912577406754816' },
541 | { id_str: '785912577394036736' },
542 | { id_str: '785912577423503360' },
543 | { id_str: '785912577427697664' },
544 | { id_str: '785912577427644416' },
545 | { id_str: '785912577394110464' },
546 | { id_str: '785912577415061504' },
547 | { id_str: '785912577402568704' },
548 | { id_str: '785912577406664705' },
549 | { id_str: '785912577423540225' },
550 | { id_str: '785912577398157312' },
551 | { id_str: '785912577393950721' },
552 | { id_str: '785912581622030336' },
553 | { id_str: '785912581605261316' },
554 | { id_str: '785912581605076992' },
555 | { id_str: '785912581592649728' },
556 | { id_str: '785912581605122048' },
557 | { id_str: '785912581609226240' },
558 | { id_str: '785912581621882880' },
559 | { id_str: '785912581621968898' },
560 | { id_str: '785912581626093568' },
561 | { id_str: '785912585807888384' },
562 | { id_str: '785912585791078400' },
563 | { id_str: '785912585803722752' },
564 | { id_str: '785912585812148224' },
565 | { id_str: '785912585811918848' },
566 | { id_str: '785912585820381188' },
567 | { id_str: '785912585803665408' },
568 | { id_str: '785912585786753024' },
569 | { id_str: '785912585803575296' },
570 | { id_str: '785912585803534337' },
571 | { id_str: '785912589985443840' },
572 | { id_str: '785912590010617857' },
573 | { id_str: '785912589993861121' },
574 | { id_str: '785912589981212672' },
575 | { id_str: '785912589985259520' },
576 | { id_str: '785912589976940544' },
577 | { id_str: '785912589989519360' },
578 | { id_str: '785912589989666817' },
579 | { id_str: '785912589989523456' },
580 | { id_str: '785912590014623744' },
581 | { id_str: '785912589989601280' },
582 | { id_str: '785912594204876800' },
583 | { id_str: '785912594188165124' },
584 | { id_str: '785912594187956224' },
585 | { id_str: '785912594187980801' },
586 | { id_str: '785912594171326464' },
587 | { id_str: '785912594183884800' },
588 | { id_str: '785912598369820672' },
589 | { id_str: '785912598403223552' },
590 | { id_str: '785912598382338048' },
591 | { id_str: '785912602593550336' },
592 | { id_str: '785912602576560128' },
593 | { id_str: '785912602576711680' },
594 | { id_str: '785912602585071617' },
595 | { id_str: '785912602568249344' },
596 | { id_str: '785912602589294592' },
597 | { id_str: '785912602563981312' },
598 | { id_str: '785912602572357633' },
599 | { id_str: '785912606762668035' },
600 | { id_str: '785912606754152448' },
601 | { id_str: '785912606754086912' },
602 | { id_str: '785912606787792897' },
603 | { id_str: '785912606754299904' },
604 | { id_str: '785912606775123968' },
605 | { id_str: '785912606754152449' },
606 | { id_str: '785912610965319680' },
607 | { id_str: '785912610952740864' },
608 | { id_str: '785912610973679616' },
609 | { id_str: '785912610952663040' },
610 | { id_str: '785912610969575424' },
611 | { id_str: '785912610965168128' },
612 | { id_str: '785912610982027264' },
613 | { id_str: '785912610956857344' },
614 | { id_str: '785912610948583425' },
615 | { id_str: '785912610977898496' },
616 | { id_str: '785912615163822080' },
617 | { id_str: '785912615172182016' },
618 | { id_str: '785912615168053248' },
619 | { id_str: '785912615176249345' },
620 | { id_str: '785912615167852544' },
621 | { id_str: '785912615172247552' },
622 | { id_str: '785912615146926080' },
623 | { id_str: '785912619362316288' },
624 | { id_str: '785912619370545152' },
625 | { id_str: '785912619337191424' },
626 | { id_str: '785912619374751744' },
627 | { id_str: '785912619366580224' },
628 | { id_str: '785912619374899200' },
629 | { id_str: '785912619358093312' },
630 | { id_str: '785912619366490113' },
631 | { id_str: '785912619349659648' },
632 | { id_str: '785912619374931968' },
633 | { id_str: '785912619353927681' },
634 | { id_str: '785912623560790016' },
635 | { id_str: '785912623548076032' },
636 | { id_str: '785912623569178624' },
637 | { id_str: '785912623543922688' },
638 | { id_str: '785912623539847172' },
639 | { id_str: '785912623539875840' },
640 | { id_str: '785912623543963648' },
641 | { id_str: '785912623556689920' },
642 | { id_str: '785912623539843072' },
643 | { id_str: '785912623560794112' },
644 | { id_str: '785912623531454464' },
645 | { id_str: '785912627738316800' },
646 | { id_str: '785912627734208512' },
647 | { id_str: '785912627729993728' },
648 | { id_str: '785912627763576832' },
649 | { id_str: '785912627742535681' },
650 | { id_str: '785912627746709504' },
651 | { id_str: '785912627750993920' },
652 | { id_str: '785912631953547264' },
653 | { id_str: '785912631919906816' },
654 | { id_str: '785912631924260865' },
655 | { id_str: '785912631949348865' },
656 | { id_str: '785912631957659649' },
657 | { id_str: '785912631919947776' },
658 | { id_str: '785912636131069952' },
659 | { id_str: '785912636122685440' },
660 | { id_str: '785912636122755072' },
661 | { id_str: '785912636143702016' },
662 | { id_str: '785912636143726592' },
663 | { id_str: '785912636152041472' },
664 | { id_str: '785912636131057664' },
665 | { id_str: '785912636151959553' },
666 | { id_str: '785912640312860672' },
667 | { id_str: '785912640317128704' },
668 | { id_str: '785912640312844289' },
669 | { id_str: '785912640346304512' },
670 | { id_str: '785912640342204416' },
671 | { id_str: '785912640342196224' },
672 | { id_str: '785912640329637888' },
673 | { id_str: '785912640321138688' },
674 | { id_str: '785912640329703424' },
675 | { id_str: '785912640317030400' },
676 | { id_str: '785912640346271744' },
677 | { id_str: '785912640329621504' },
678 | { id_str: '785912640312750080' },
679 | { id_str: '785912640308518912' },
680 | { id_str: '785912644532310017' },
681 | { id_str: '785912644503015425' },
682 | { id_str: '785912644528119813' },
683 | { id_str: '785912644511395840' },
684 | { id_str: '785912644507209728' },
685 | { id_str: '785912644507054080' },
686 | { id_str: '785912644519792641' },
687 | { id_str: '785912644511367168' },
688 | { id_str: '785912644540727297' },
689 | { id_str: '785912644511432705' },
690 | { id_str: '785912648701452288' },
691 | { id_str: '785912648709857280' },
692 | { id_str: '785912648709894144' },
693 | { id_str: '785912648709865472' },
694 | { id_str: '785912648726552577' },
695 | { id_str: '785912648734871552' },
696 | { id_str: '785912648714059776' },
697 | { id_str: '785912648735096832' },
698 | { id_str: '785912648730873856' },
699 | { id_str: '785912648718163968' },
700 | { id_str: '785912648709787648' },
701 | { id_str: '785912652929335296' },
702 | { id_str: '785912652916817920' },
703 | { id_str: '785912652912480256' },
704 | { id_str: '785912652920918016' },
705 | { id_str: '785912652895653888' },
706 | { id_str: '785912652904013824' },
707 | { id_str: '785912652920975360' },
708 | { id_str: '785912652924981248' },
709 | { id_str: '785912652916678656' },
710 | { id_str: '785912652929183744' },
711 | { id_str: '785912657106853892' },
712 | { id_str: '785912657115164672' },
713 | { id_str: '785912657102589952' },
714 | { id_str: '785912657123487744' },
715 | { id_str: '785912657090056192' },
716 | { id_str: '785912661301161984' },
717 | { id_str: '785912661284417536' },
718 | { id_str: '785912661284380672' },
719 | { id_str: '785912661313662980' },
720 | { id_str: '785912661280116736' },
721 | { id_str: '785912661296820224' },
722 | { id_str: '785912661297037313' },
723 | { id_str: '785912661284384769' },
724 | { id_str: '785912661301092352' },
725 | { id_str: '785912661313744896' },
726 | { id_str: '785912665512214529' },
727 | { id_str: '785912665491275776' },
728 | { id_str: '785912665499631620' },
729 | { id_str: '785912665499512832' },
730 | { id_str: '785912665495310337' },
731 | { id_str: '785912665512083461' },
732 | { id_str: '785912665482768384' },
733 | { id_str: '785912665512214530' },
734 | { id_str: '785912669698134016' },
735 | { id_str: '785912669668642817' },
736 | { id_str: '785912669702422528' },
737 | { id_str: '785912669706391552' },
738 | { id_str: '785912669706461184' },
739 | { id_str: '785912665491251204' },
740 | { id_str: '785912673896697857' },
741 | { id_str: '785912673875689472' },
742 | { id_str: '785912673888153600' },
743 | { id_str: '785912673896570880' },
744 | { id_str: '785912673875570688' },
745 | { id_str: '785912673884114945' },
746 | { id_str: '785912673900703744' },
747 | { id_str: '785912673888247808' },
748 | { id_str: '785912673879920640' },
749 | { id_str: '785912678074183680' },
750 | { id_str: '785912678057402368' },
751 | { id_str: '785912678095032320' },
752 | { id_str: '785912678057377797' },
753 | { id_str: '785912678057447424' },
754 | { id_str: '785912678057467904' },
755 | { id_str: '785912682268491776' },
756 | { id_str: '785912682285326336' },
757 | { id_str: '785912682289299456' },
758 | { id_str: '785912682280988672' },
759 | { id_str: '785912682289528832' },
760 | { id_str: '785912686475407360' },
761 | { id_str: '785912686458667008' },
762 | { id_str: '785912686446075905' },
763 | { id_str: '785912686462787585' },
764 | { id_str: '785912686475444224' },
765 | { id_str: '785912686479413248' },
766 | { id_str: '785912686471110657' },
767 | { id_str: '785912686471024640' },
768 | { id_str: '785912686471098368' },
769 | { id_str: '785912686450061312' },
770 | { id_str: '785912686458658816' },
771 | { id_str: '785912690640388096' },
772 | { id_str: '785912690661351428' },
773 | { id_str: '785912690673934336' },
774 | { id_str: '785912690669658113' },
775 | { id_str: '785912690678071296' },
776 | { id_str: '785912690665402368' },
777 | { id_str: '785912690677985280' },
778 | { id_str: '785912690644361216' },
779 | { id_str: '785912694847266816' },
780 | { id_str: '785912694872371200' },
781 | { id_str: '785912694838730752' },
782 | { id_str: '785912694859706368' },
783 | { id_str: '785912694855438336' },
784 | { id_str: '785912694834593792' },
785 | { id_str: '785912694863831040' },
786 | { id_str: '785912694834466816' },
787 | { id_str: '785912694847123456' },
788 | { id_str: '785912694834466817' },
789 | { id_str: '785912699033100288' },
790 | { id_str: '785912699066605568' },
791 | { id_str: '785912699053936641' },
792 | { id_str: '785912699032961024' },
793 | { id_str: '785912699066523648' },
794 | { id_str: '785912699041361920' },
795 | { id_str: '785912699062484992' },
796 | { id_str: '785912703235874816' },
797 | { id_str: '785912703261048833' },
798 | { id_str: '785912703252443136' },
799 | { id_str: '785912703239938048' },
800 | { id_str: '785912703261040640' },
801 | { id_str: '785912703252430848' },
802 | { id_str: '785912703248457728' },
803 | { id_str: '785912703260975104' },
804 | { id_str: '785912703248367616' },
805 | { id_str: '785912703227301888' },
806 | { id_str: '785912703227342849' },
807 | { id_str: '785912703239979008' },
808 | { id_str: '785912703248322560' },
809 | { id_str: '785912703240077312' },
810 | { id_str: '785912703252566016' },
811 | { id_str: '785912707417505792' },
812 | { id_str: '785912707438505984' },
813 | { id_str: '785912707425902592' },
814 | { id_str: '785912707417513984' },
815 | { id_str: '785912707442577408' },
816 | { id_str: '785912707451092996' },
817 | { id_str: '785912707442544640' },
818 | { id_str: '785912707421728768' },
819 | { id_str: '785912707434373120' },
820 | { id_str: '785912711620288512' },
821 | { id_str: '785912711611686912' },
822 | { id_str: '785912711645306880' },
823 | { id_str: '785912711611899904' },
824 | { id_str: '785912711637000192' },
825 | { id_str: '785912711628464128' },
826 | { id_str: '785912711615918080' },
827 | { id_str: '785912711637045248' },
828 | { id_str: '785912711632842752' },
829 | { id_str: '785912715810308101' },
830 | { id_str: '785912715839766528' },
831 | { id_str: '785912715843895296' },
832 | { id_str: '785912715831308288' },
833 | { id_str: '785912715835543552' },
834 | { id_str: '785912715831341056' },
835 | { id_str: '785912715818639360' },
836 | { id_str: '785912715826991104' },
837 | { id_str: '785912720008876032' },
838 | { id_str: '785912720017063936' },
839 | { id_str: '785912720000376832' },
840 | { id_str: '785912720021450752' },
841 | { id_str: '785912720008753152' },
842 | { id_str: '785912720017199105' },
843 | { id_str: '785912720025526274' },
844 | { id_str: '785912720017264640' },
845 | { id_str: '785912720021413888' },
846 | { id_str: '785912720025538560' },
847 | { id_str: '785912720013070337' },
848 | { id_str: '785912720029655040' },
849 | { id_str: '785912724232478721' },
850 | { id_str: '785912724198789120' },
851 | { id_str: '785912724198985728' },
852 | { id_str: '785912724207259650' },
853 | { id_str: '785912724211531776' },
854 | { id_str: '785912724232384512' },
855 | { id_str: '785912724223954944' },
856 | { id_str: '785912724219756544' },
857 | { id_str: '785912724203024384' },
858 | { id_str: '785912724223950848' },
859 | { id_str: '785912724223987712' },
860 | { id_str: '785912728397512704' },
861 | { id_str: '785912728405676032' },
862 | { id_str: '785912728401678336' },
863 | { id_str: '785912728422678529' },
864 | { id_str: '785912728418410496' },
865 | { id_str: '785912728397357057' },
866 | { id_str: '785912728388902912' },
867 | { id_str: '785912728410087424' },
868 | { id_str: '785912732599975936' },
869 | { id_str: '785912732587483136' },
870 | { id_str: '785912732591742976' },
871 | { id_str: '785912732604391424' },
872 | { id_str: '785912732616826880' },
873 | { id_str: '785912736811278336' },
874 | { id_str: '785912736777576448' },
875 | { id_str: '785912736807002112' },
876 | { id_str: '785912736798605313' },
877 | { id_str: '785912736807022592' },
878 | { id_str: '785912740971966464' },
879 | { id_str: '785912740976132096' },
880 | { id_str: '785912740992933888' },
881 | { id_str: '785912745204051969' },
882 | { id_str: '785912745174634496' },
883 | { id_str: '785912745195610112' },
884 | { id_str: '785912745187217409' },
885 | { id_str: '785912745178767360' },
886 | { id_str: '785912745191411712' },
887 | { id_str: '785912745199702017' },
888 | { id_str: '785912745174573056' },
889 | { id_str: '785912749385736192' },
890 | { id_str: '785912749360578562' },
891 | { id_str: '785912749373227008' },
892 | { id_str: '785912749373128706' },
893 | { id_str: '785912749398208512' },
894 | { id_str: '785912749398298624' },
895 | { id_str: '785912749381390336' },
896 | { id_str: '785912753563242496' },
897 | { id_str: '785912753554755588' },
898 | { id_str: '785912753584152576' },
899 | { id_str: '785912753571569664' },
900 | { id_str: '785912753559003136' },
901 | { id_str: '785912753571573760' },
902 | { id_str: '785912757778513920' },
903 | { id_str: '785912757778522113' },
904 | { id_str: '785912757761736704' },
905 | { id_str: '785912757782732800' },
906 | { id_str: '785912757770133504' },
907 | { id_str: '785912757757632512' },
908 | { id_str: '785912757761765380' },
909 | { id_str: '785912757757448192' },
910 | { id_str: '785912757774344192' },
911 | { id_str: '785912757778427904' },
912 | { id_str: '785912757782663168' },
913 | { id_str: '785912757753372672' },
914 | { id_str: '785912757778575360' },
915 | { id_str: '785912757765836801' },
916 | { id_str: '785912757778456576' },
917 | { id_str: '785912757786972160' },
918 | { id_str: '785912757769998336' },
919 | { id_str: '785912757778546688' },
920 | { id_str: '785912757761695744' },
921 | { id_str: '785912761972846592' },
922 | { id_str: '785912761972822016' },
923 | { id_str: '785912761951875074' },
924 | { id_str: '785912761960239104' },
925 | { id_str: '785912761964376064' },
926 | { id_str: '785912761960239106' },
927 | { id_str: '785912761964376065' },
928 | { id_str: '785912766162956290' },
929 | { id_str: '785912766154637318' },
930 | { id_str: '785912766154637319' },
931 | { id_str: '785912766146154496' },
932 | { id_str: '785912766150373377' },
933 | { id_str: '785912766150373376' },
934 | { id_str: '785912766141984770' },
935 | { id_str: '785912766167212032' },
936 | { id_str: '785912766141984768' },
937 | { id_str: '785912766162956289' },
938 | { id_str: '785912766137720832' },
939 | { id_str: '785912770369814528' },
940 | { id_str: '785912770361430016' },
941 | { id_str: '785912770361454592' },
942 | { id_str: '785912770361524224' },
943 | { id_str: '785912770357112832' },
944 | { id_str: '785912770336202752' },
945 | { id_str: '785912770365652992' },
946 | { id_str: '785912770340409344' },
947 | { id_str: '785912770357260288' },
948 | { id_str: '785912774559948800' },
949 | { id_str: '785912774555758592' },
950 | { id_str: '785912774559993856' },
951 | { id_str: '785912774547345408' },
952 | { id_str: '785912774564061185' },
953 | { id_str: '785912774530592768' },
954 | { id_str: '785912774555672576' },
955 | { id_str: '785912774530478080' },
956 | { id_str: '785912774526373888' },
957 | { id_str: '785912774538825732' },
958 | { id_str: '785912778729152514' },
959 | { id_str: '785912778737520640' },
960 | { id_str: '785912778741669889' },
961 | { id_str: '785912778758451200' },
962 | { id_str: '785912778720579584' },
963 | { id_str: '785912778741645312' },
964 | { id_str: '785912778758369280' },
965 | { id_str: '785912778724929536' },
966 | { id_str: '785912778724782080' },
967 | { id_str: '785912782952607748' },
968 | { id_str: '785912782936039424' },
969 | { id_str: '785912782944243712' },
970 | { id_str: '785912782944296960' },
971 | { id_str: '785912782935904260' },
972 | { id_str: '785912787134517248' },
973 | { id_str: '785912787126083584' },
974 | { id_str: '785912787117768705' },
975 | { id_str: '785912787138523136' },
976 | { id_str: '785912787117539328' },
977 | { id_str: '785912787121737728' },
978 | { id_str: '785912787142860802' },
979 | { id_str: '785912787121954816' },
980 | { id_str: '785912787134406658' },
981 | { id_str: '785912791332950016' },
982 | { id_str: '785912791307788289' },
983 | { id_str: '785912791324618753' },
984 | { id_str: '785912791316045825' },
985 | { id_str: '785912791311982592' },
986 | { id_str: '785912795531468801' },
987 | { id_str: '785912795497988096' },
988 | { id_str: '785912795523084288' },
989 | { id_str: '785912795501998080' },
990 | { id_str: '785912795518742528' },
991 | { id_str: '785912795510345729' },
992 | { id_str: '785912795510353920' },
993 | { id_str: '785912799729815552' },
994 | { id_str: '785912799721435140' },
995 | { id_str: '785912799704735744' },
996 | { id_str: '785912799729897472' },
997 | { id_str: '785912799713071104' },
998 | { id_str: '785912803915948036' },
999 | { id_str: '785912803894910976' },
1000 | { id_str: '785912803886596096' },
1001 | { id_str: '785912803919933442' },
1002 | { id_str: '785912803915862016' },
1003 | { id_str: '785912803899088896' },
1004 | { id_str: '785912803915816961' },
1005 | { id_str: '785912803894886400' },
1006 | { id_str: '785912803907416064' },
1007 | { id_str: '785912803890716673' },
1008 | { id_str: '785912808097579008' },
1009 | { id_str: '785912808114262017' },
1010 | { id_str: '785912808110075904' },
1011 | { id_str: '785912808114229249' },
1012 | { id_str: '785912812283555841' },
1013 | { id_str: '785912812283518976' },
1014 | { id_str: '785912812300341248' },
1015 | { id_str: '785912812274987008' },
1016 | { id_str: '785912812304347136' },
1017 | { id_str: '785912816482000896' },
1018 | { id_str: '785912816477822976' },
1019 | { id_str: '785912816502833152' },
1020 | { id_str: '785912816481951744' },
1021 | { id_str: '785912816469442561' },
1022 | { id_str: '785912816477822978' },
1023 | ];
1024 |
1025 | export default fixtures;
1026 |
--------------------------------------------------------------------------------