├── .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 | 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

Please log in

; 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 |
148 |

149 | 150 |

151 |
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 | --------------------------------------------------------------------------------