diff --git a/README.md b/README.md index 6ab2997..5191f09 100644 --- a/README.md +++ b/README.md @@ -8,46 +8,53 @@ struct Settings { - int x = 0; - int y = 0; - int width = 0; - int height = 0; - bool fullscreen = false; - std::string renderer = ""; - - JSON5_MEMBERS(x, y, width, height, fullscreen, renderer) + int x = 0; + int y = 0; + int width = 0; + int height = 0; + bool fullscreen = false; + std::string renderer = ""; + + JSON5_MEMBERS(x, y, width, height, fullscreen, renderer) }; Settings s; // Fill 's' instance from file -json5::from_file("settings.json", s); +json5::FromFile("settings.json", s); // Save 's' to file -json5::to_file("settings.json", s); +json5::ToFile("settings.json", s); ``` ## `json5.hpp` -TBD +Provides the basic types of `json5::Document`, `json5::Value`, and `json5::IndependentValue`. A `Value` represents a value within JSON but it relies on a `Document` for storage of non-primitive (string, array, object) data. A `Value` may be more difficult to manipulate which is why the `IndependentValue` is provided. An `IndependentValue` is self-contained and indepenedent of any other object. It contains a variant which respresents all possible JSON value types. Parsing is faster with a `Document` than with an `IndependentValue` due to its compact nature and small number of memory allocations. ## `json5_input.hpp` -Provides functions to load `json5::document` from string, stream or file. +Provides functions to load `json5::Document` or `json5::IndependentValue` from string, stream or file. ## `json5_output.hpp` -Provides functions to convert `json5::document` into string, stream or file. +Provides functions to convert `json5::Document` or `json5::IndependentValue` into string, stream or file. ## `json5_builder.hpp` +Defines `Builder`s for building `Document`s and `IndependentValue`s. Also provides the basis for building arbitrary objects via reflection. ## `json5_reflect.hpp` +Provides functionality to read/write structs/classes from/to a string, stream, or file ### Basic supported types: - `bool` -- `int`, `float`, `double` +- `int`, `float`, `double`, and other numeric types - `std::string` -- `std::vector`, `std::map`, `std::unordered_map`, `std::array` +- `std::vector`, `std::array`, `std::map`, `std::unordered_map`, `std::array` - `C array` +### Reading from JSON +Reading is accomplished via the templated class `json5::detail::Reflector`. A custom deserializer can be made via a template specialiaztion (or partial specialization) for the class type. Often one would want to inherit `json5::detail::RefReflector` which holds a reference to the target object. Then override the relevant functions in `json5::detail::BaseReflector`. This is works because `Parser` will parse the JSON, calling functions on `ReflectionBuilder` which uses a stack of `BaseReflector` objects as it parses depth first into an object. +Writing is accomplished via the templated struct `json5::detail::ReflectionWriter`. A custom serialization should create a template specialization (or partial specialiaztion) for this struct and implement `static inline void Write(Writer& w, const T& in)` with the proper value for `T` (in need not be a const ref but could instead take by value like is done when serializing numbers but non-primitives likely should be const ref). This was changed from a templated function becuase partial specializations are not possible with functions but are possible with structs. + ## `json5_base.hpp` +Contains `Error` definitions, `ValueType` enum, and macro definitions. ## `json5_filter.hpp` @@ -59,34 +66,55 @@ TBD ### Serialize custom type: ```cpp // Let's have a 3D vector struct: -struct vec3 { float x, y, z; }; +struct Vec3 +{ + float x, y, z; +}; // Let's have a triangle struct with 'vec3' members struct Triangle { - vec3 a, b, c; + vec3 a, b, c; }; JSON5_CLASS(Triangle, a, b, c) namespace json5::detail { - -// Write vec3 as JSON array of 3 numbers -inline json5::value write( writer &w, const vec3 &in ) -{ - w.push_array(); - w += write( w, in.x ); - w += write( w, in.y ); - w += write( w, in.z ); - return w.pop(); -} - -// Read vec3 from JSON array -inline error read( const json5::value &in, vec3 &out ) -{ - return read( json5::array_view( in ), out.x, out.y, out.z ); -} - + // Write Vec3 to JSON array + template <> + class ReflectionWriter : public TupleReflectionWriter + { + public: + static inline void Write(Writer& w, const Vec3& in) { TupleReflectionWriter::Write(w, in.x, in.y, in.z); } + }; + + // Read Vec3 from JSON array + template <> + class Reflector : public TupleReflector + { + public: + explicit Reflector(Vec3& vec) + : TupleReflector(vec.x, vec.y, vec.z) + {} + }; + + // Write Triangle as JSON array of 3 numbers + template <> + class ReflectionWriter : public TupleReflectionWriter + { + public: + static inline void Write(Writer& w, const Triangle& in) { TupleReflectionWriter::Write(w, in.a, in.b, in.c); } + }; + + // Read Triangle from JSON array + template <> + class Reflector : public TupleReflector + { + public: + explicit Reflector(Triangle& tri) + : TupleReflector(tri.a, tri.b, tri.c) + {} + }; } // namespace json5::detail ``` @@ -94,12 +122,12 @@ inline error read( const json5::value &in, vec3 &out ) ```cpp enum class MyEnum { - Zero, - First, - Second, - Third + Zero, + First, + Second, + Third }; // (must be placed in global namespce, requires C++20) -JSON5_ENUM( MyEnum, Zero, First, Second, Third ) +JSON5_ENUM(MyEnum, Zero, First, Second, Third) ``` diff --git a/include/json5/json5.hpp b/include/json5/json5.hpp index 24f25f4..454b8b1 100644 --- a/include/json5/json5.hpp +++ b/include/json5/json5.hpp @@ -1,499 +1,564 @@ #pragma once -#include "json5_base.hpp" - #include #include +#include #include +#include #include -namespace json5 { - -/* - -json5::value - -*/ -class value -{ -public: - // Construct null value - value() noexcept = default; - - // Construct null value - value( std::nullptr_t ) noexcept : _data( type_null ) { } - - // Construct boolean value - value( bool val ) noexcept : _data( val ? type_true : type_false ) { } - - // Construct number value from int (will be converted to double) - value( int val ) noexcept : _double( val ) { } - - // Construct number value from float (will be converted to double) - value( float val ) noexcept : _double( val ) { } - - // Construct number value from double - value( double val ) noexcept : _double( val ) { } - - // Return value type - value_type type() const noexcept; - - // Checks, if value is null - bool is_null() const noexcept { return _data == type_null; } - - // Checks, if value stores boolean. Use 'get_bool' for reading. - bool is_boolean() const noexcept { return _data == type_true || _data == type_false; } - - // Checks, if value stores number. Use 'get' or 'try_get' for reading. - bool is_number() const noexcept { return ( _data & mask_nanbits ) != mask_nanbits; } - - // Checks, if value stores string. Use 'get_c_str' for reading. - bool is_string() const noexcept { return ( _data & mask_type ) == type_string; } - - // Checks, if value stores JSON object. Use 'object_view' wrapper - // to iterate over key-value pairs (properties). - bool is_object() const noexcept { return ( _data & mask_type ) == type_object; } - - // Checks, if value stores JSON array. Use 'array_view' wrapper - // to iterate over array elements. - bool is_array() const noexcept { return ( _data & mask_type ) == type_array; } - - // Get stored bool. Returns 'defaultValue', if this value is not a boolean. - bool get_bool( bool defaultValue = false ) const noexcept; - - // Get stored string. Returns 'defaultValue', if this value is not a string. - const char *get_c_str( const char *defaultValue = "" ) const noexcept; - - // Get stored number as type 'T'. Returns 'defaultValue', if this value is not a number. - template - T get( T defaultValue = 0 ) const noexcept - { - return is_number() ? T( _double ) : defaultValue; - } - - // Try to get stored number as type 'T'. Returns false, if this value is not a number. - template - bool try_get( T &out ) const noexcept - { - if ( !is_number() ) - return false; - - out = T( _double ); - return true; - } - - // Equality test against another value. Note that this might be a very expensive operation - // for large nested JSON objects! - bool operator==( const value &other ) const noexcept; - - // Non-equality test - bool operator!=( const value &other ) const noexcept { return !( ( *this ) == other ); } - - // Use value as JSON object and get property value under 'key'. If this value - // is not an object or 'key' is not found, null value is always returned. - value operator[]( std::string_view key ) const noexcept; - - // Use value as JSON array and get item at 'index'. If this value is not - // an array or index is out of bounds, null value is returned. - value operator[]( size_t index ) const noexcept; - - // Get value payload (lower 48bits of _data) converted to type 'T' - template T payload() const noexcept { return ( T )( _data & mask_payload ); } - -protected: - value( value_type t, uint64_t data ); - value( value_type t, const void *data ) : value( t, reinterpret_cast( data ) ) { } - - void relink( const class document *prevDoc, const class document &doc ) noexcept; - - // NaN-boxed data - union - { - double _double; - uint64_t _data; - }; - - static constexpr uint64_t mask_nanbits = 0xFFF0000000000000ull; - static constexpr uint64_t mask_type = 0xFFFF000000000000ull; - static constexpr uint64_t mask_payload = 0x0000FFFFFFFFFFFFull; - static constexpr uint64_t type_null = 0xFFFC000000000000ull; - static constexpr uint64_t type_false = 0xFFF1000000000000ull; - static constexpr uint64_t type_true = 0xFFF3000000000000ull; - static constexpr uint64_t type_string = 0xFFF2000000000000ull; - static constexpr uint64_t type_array = 0xFFF4000000000000ull; - static constexpr uint64_t type_object = 0xFFF6000000000000ull; - - // Stores lower 48bits of uint64 as payload - void payload( uint64_t p ) noexcept { _data = ( _data & ~mask_payload ) | p; } - - // Stores lower 48bits of a pointer as payload - void payload( const void *p ) noexcept { payload( reinterpret_cast( p ) ); } - - friend document; - friend builder; -}; - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/* - -json5::document - -*/ -class document final : public value -{ -public: - // Construct empty document - document() = default; - - // Construct a document copy - document( const document © ) { assign_copy( copy ); } - - // Construct a document from r-value - document( document &&rValue ) noexcept { assign_rvalue( std::forward( rValue ) ); } - - // Copy data from another document (does a deep copy) - document &operator=( const document © ) { assign_copy( copy ); return *this; } - - // Assign data from r-value (does a swap) - document &operator=( document &&rValue ) noexcept { assign_rvalue( std::forward( rValue ) ); return *this; } - -private: - void assign_copy( const document © ); - void assign_rvalue( document &&rValue ) noexcept; - void assign_root( value root ) noexcept; - - std::string _strings; - std::vector _values; - - friend value; - friend builder; -}; - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/* - -json5::object_view - -*/ -class object_view final -{ -public: - // Construct an empty object view - object_view() noexcept = default; - - // Construct object view over a value. If the provided value does not reference a JSON object, - // this object_view will be created empty (and invalid) - object_view( const value &v ) noexcept - : _pair( v.is_object() ? ( v.payload() + 1 ) : nullptr ) - , _count( _pair ? ( _pair[-1].get() / 2 ) : 0 ) - { } - - // Checks, if object view was constructed from valid value - bool is_valid() const noexcept { return _pair != nullptr; } - - using key_value_pair = std::pair; - - class iterator final - { - public: - iterator( const value *p = nullptr ) noexcept : _pair( p ) { } - bool operator!=( const iterator &other ) const noexcept { return _pair != other._pair; } - bool operator==( const iterator &other ) const noexcept { return _pair == other._pair; } - iterator &operator++() noexcept { _pair += 2; return *this; } - key_value_pair operator*() const noexcept { return key_value_pair( _pair[0].get_c_str(), _pair[1] ); } - - private: - const value *_pair = nullptr; - }; - - // Get an iterator to the beginning of the object (first key-value pair) - iterator begin() const noexcept { return iterator( _pair ); } - - // Get an iterator to the end of the object (past the last key-value pair) - iterator end() const noexcept { return iterator( _pair + _count * 2 ); } - - // Find property value with 'key'. Returns end iterator, when not found. - iterator find( std::string_view key ) const noexcept; - - // Get number of key-value pairs - size_t size() const noexcept { return _count; } - - bool empty() const noexcept { return size() == 0; } - value operator[]( std::string_view key ) const noexcept; - - bool operator==( const object_view &other ) const noexcept; - bool operator!=( const object_view &other ) const noexcept { return !( ( *this ) == other ); } - -private: - const value *_pair = nullptr; - size_t _count = 0; -}; - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/* - -json5::array_view - -*/ -class array_view final -{ -public: - // Construct an empty array view - array_view() noexcept = default; - - // Construct array view over a value. If the provided value does not reference a JSON array, - // this array_view will be created empty (and invalid) - array_view( const value &v ) noexcept - : _value( v.is_array() ? ( v.payload() + 1 ) : nullptr ) - , _count( _value ? _value[-1].get() : 0 ) - { } - - // Checks, if array view was constructed from valid value - bool is_valid() const noexcept { return _value != nullptr; } - - using iterator = const value*; - - iterator begin() const noexcept { return _value; } - iterator end() const noexcept { return _value + _count; } - size_t size() const noexcept { return _count; } - bool empty() const noexcept { return _count == 0; } - value operator[]( size_t index ) const noexcept; - - bool operator==( const array_view &other ) const noexcept; - bool operator!=( const array_view &other ) const noexcept { return !( ( *this ) == other ); } - -private: - const value *_value = nullptr; - size_t _count = 0; -}; - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -//--------------------------------------------------------------------------------------------------------------------- -inline value::value( value_type t, uint64_t data ) -{ - if ( t == value_type::object ) - _data = type_object | data; - else if ( t == value_type::array ) - _data = type_array | data; - else if ( t == value_type::string ) - _data = type_string | data; - else - _data = type_null; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline value_type value::type() const noexcept -{ - if ( ( _data & mask_nanbits ) != mask_nanbits ) - return value_type::number; - - if ( ( _data & mask_type ) == type_object ) - return value_type::object; - else if ( ( _data & mask_type ) == type_array ) - return value_type::array; - else if ( ( _data & mask_type ) == type_string ) - return value_type::string; - if ( _data == type_true || _data == type_false ) - return value_type::boolean; - - return value_type::null; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline bool value::get_bool( bool defaultValue ) const noexcept -{ - if ( _data == type_true ) - return true; - else if ( _data == type_false ) - return false; - - return defaultValue; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline const char *value::get_c_str( const char *defaultValue ) const noexcept -{ - return is_string() ? payload() : defaultValue; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline bool value::operator==( const value &other ) const noexcept -{ - if ( auto t = type(); t == other.type() ) - { - if ( t == value_type::null ) - return true; - else if ( t == value_type::boolean ) - return _data == other._data; - else if ( t == value_type::number ) - return _double == other._double; - else if ( t == value_type::string ) - return std::string_view( payload() ) == std::string_view( other.payload() ); - else if ( t == value_type::array ) - return array_view( *this ) == array_view( other ); - else if ( t == value_type::object ) - return object_view( *this ) == object_view( other ); - } - - return false; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline value value::operator[]( std::string_view key ) const noexcept -{ - if ( !is_object() ) - return value(); - - object_view ov( *this ); - return ov[key]; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline value value::operator[]( size_t index ) const noexcept -{ - if ( !is_array() ) - return value(); - - array_view av( *this ); - return av[index]; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline void value::relink( const class document *prevDoc, const class document &doc ) noexcept -{ - if ( is_string() ) - { - if ( prevDoc ) - payload( payload() - prevDoc->_strings.data() ); - - payload( doc._strings.data() + payload() ); - } - else if ( is_object() || is_array() ) - { - if ( prevDoc ) - payload( payload() - prevDoc->_values.data() ); - - payload( doc._values.data() + payload() ); - } -} - -//--------------------------------------------------------------------------------------------------------------------- -inline void document::assign_copy( const document © ) -{ - _data = copy._data; - _strings = copy._strings; - _values = copy._values; - - for ( auto &v : _values ) - v.relink( ©, *this ); - - relink( ©, *this ); -} - -//--------------------------------------------------------------------------------------------------------------------- -inline void document::assign_rvalue( document &&rValue ) noexcept -{ - _data = std::move( rValue._data ); - _strings = std::move( rValue._strings ); - _values = std::move( rValue._values ); - - for ( auto &v : _values ) - v.relink( &rValue, *this ); - - for ( auto &v : rValue._values ) - v.relink( this, rValue ); -} - -//--------------------------------------------------------------------------------------------------------------------- -inline void document::assign_root( value root ) noexcept -{ - _data = root._data; - - for ( auto &v : _values ) - v.relink( nullptr, *this ); - - relink( nullptr, *this ); -} - -//--------------------------------------------------------------------------------------------------------------------- -inline object_view::iterator object_view::find( std::string_view key ) const noexcept -{ - if ( !key.empty() ) - { - for ( auto iter = begin(); iter != end(); ++iter ) - if ( key == ( *iter ).first ) - return iter; - } - - return end(); -} - -//--------------------------------------------------------------------------------------------------------------------- -inline value object_view::operator[]( std::string_view key ) const noexcept -{ - const auto iter = find( key ); - return ( iter != end() ) ? ( *iter ).second : value(); -} +#include "json5_base.hpp" -//--------------------------------------------------------------------------------------------------------------------- -inline bool object_view::operator==( const object_view &other ) const noexcept -{ - if ( size() != other.size() ) - return false; - - if ( empty() ) - return true; - - static constexpr size_t stack_pair_count = 256; - key_value_pair tempPairs1[stack_pair_count]; - key_value_pair tempPairs2[stack_pair_count]; - key_value_pair *pairs1 = _count <= stack_pair_count ? tempPairs1 : new key_value_pair[_count]; - key_value_pair *pairs2 = _count <= stack_pair_count ? tempPairs2 : new key_value_pair[_count]; - { size_t i = 0; for ( const auto kvp : *this ) pairs1[i++] = kvp; } - { size_t i = 0; for ( const auto kvp : other ) pairs2[i++] = kvp; } - - const auto comp = []( const key_value_pair & a, const key_value_pair & b ) noexcept -> bool - { return strcmp( a.first, b.first ) < 0; }; - - std::sort( pairs1, pairs1 + _count, comp ); - std::sort( pairs2, pairs2 + _count, comp ); - - bool result = true; - for ( size_t i = 0; i < _count; ++i ) - { - if ( strcmp( pairs1[i].first, pairs2[i].first ) || pairs1[i].second != pairs2[i].second ) - { - result = false; - break; - } - } - - if ( _count > stack_pair_count ) { delete[] pairs1; delete[] pairs2; } - return result; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline value array_view::operator[]( size_t index ) const noexcept +namespace json5 { - return ( index < _count ) ? _value[index] : value(); -} -//--------------------------------------------------------------------------------------------------------------------- -inline bool array_view::operator==( const array_view &other ) const noexcept -{ - if ( size() != other.size() ) - return false; + /* - auto iter = begin(); - for ( const auto &v : other ) - if ( *iter++ != v ) - return false; + json5::Value + + */ + class Value + { + public: + // Construct null value + Value() noexcept + : Value(nullptr) + {} + + // Construct null value + explicit Value(std::nullptr_t) noexcept + : data(TypeNull) + {} + + // Construct boolean value + explicit Value(bool val) noexcept + : data(val ? TypeTrue : TypeFalse) + {} + + // Construct number value from int (will be converted to double) + explicit Value(int val) noexcept + : dbl(val) + {} + + // Construct number value from float (will be converted to double) + explicit Value(float val) noexcept + : dbl(val) + {} + + // Construct number value from double + explicit Value(double val) noexcept + : dbl(val) + {} + + // Return value type + ValueType type() const noexcept; + + // Checks, if value is null + bool isNull() const noexcept { return data == TypeNull; } + + // Checks, if value stores boolean. Use 'getBool' for reading. + bool isBoolean() const noexcept { return data == TypeTrue || data == TypeFalse; } + + // Checks, if value stores number. Use 'get' or 'tryGet' for reading. + bool isNumber() const noexcept { return (data & MaskNaNbits) != MaskNaNbits; } + + // Checks, if value stores string. Use 'getCStr' for reading. + bool isString() const noexcept { return (data & MaskType) == TypeString; } + + // Checks, if value stores JSON object. Use 'ObjectView' wrapper + // to iterate over key-value pairs (properties). + bool isObject() const noexcept { return (data & MaskType) == TypeObject; } + + // Checks, if value stores JSON array. Use 'ArrayView' wrapper + // to iterate over array elements. + bool isArray() const noexcept { return (data & MaskType) == TypeArray; } + + // Get stored bool. Returns 'defaultValue', if this value is not a boolean. + bool getBool(bool defaultValue = false) const noexcept; + + // Get stored string. Returns 'defaultValue', if this value is not a string. + const char* getCStr(const char* defaultValue = "") const noexcept; + + // Get stored number as type 'T'. Returns 'defaultValue', if this value is not a number. + template + T get(T defaultValue = 0) const noexcept + { + return isNumber() ? T(dbl) : defaultValue; + } + + // Try to get stored number as type 'T'. Returns false, if this value is not a number. + template + bool tryGet(T& out) const noexcept + { + if (!isNumber()) + return false; + + out = T(dbl); + return true; + } + + // Equality test against another value. Note that this might be a very expensive operation + // for large nested JSON objects! + bool operator==(const Value& other) const noexcept; + + // Non-equality test + bool operator!=(const Value& other) const noexcept { return !((*this) == other); } + + // Use value as JSON object and get property value under 'key'. If this value + // is not an object or 'key' is not found, null value is always returned. + Value operator[](std::string_view key) const noexcept; + + // Use value as JSON array and get item at 'index'. If this value is not + // an array or index is out of bounds, null value is returned. + Value operator[](size_t index) const noexcept; + + // Get value payload (lower 48bits of data) converted to type 'T' + template + T payload() const noexcept + { + return (T)(data & MaskPayload); + } + + protected: + Value(ValueType t, uint64_t dataIn); + Value(ValueType t, const void* data) + : Value(t, reinterpret_cast(data)) + {} + + void relink(const class Document* prevDoc, const class Document& doc) noexcept; + + // NaN-boxed data + union + { + double dbl; + uint64_t data; + }; + + static constexpr uint64_t MaskNaNbits = 0xFFF0000000000000ull; + static constexpr uint64_t MaskType = 0xFFFF000000000000ull; + static constexpr uint64_t MaskPayload = 0x0000FFFFFFFFFFFFull; + static constexpr uint64_t TypeNull = 0xFFFC000000000000ull; + static constexpr uint64_t TypeFalse = 0xFFF1000000000000ull; + static constexpr uint64_t TypeTrue = 0xFFF3000000000000ull; + static constexpr uint64_t TypeString = 0xFFF2000000000000ull; + static constexpr uint64_t TypeArray = 0xFFF4000000000000ull; + static constexpr uint64_t TypeObject = 0xFFF6000000000000ull; + + // Stores lower 48bits of uint64 as payload + void payload(uint64_t p) noexcept { data = (data & ~MaskPayload) | p; } + + // Stores lower 48bits of a pointer as payload + void payload(const void* p) noexcept { payload(reinterpret_cast(p)); } + + friend Document; + friend DocumentBuilder; + }; + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /* + + json5::Document + + */ + class Document final : public Value + { + public: + // Construct empty document + Document() = default; + + // Construct a document copy + Document(const Document& copy) { assignCopy(copy); } + + // Construct a document from r-value + Document(Document&& rValue) noexcept { assignRvalue(std::forward(rValue)); } + + // Copy data from another document (does a deep copy) + Document& operator=(const Document& copy) + { + assignCopy(copy); + return *this; + } + + // Assign data from r-value (does a swap) + Document& operator=(Document&& rValue) noexcept + { + assignRvalue(std::forward(rValue)); + return *this; + } + + private: + void assignCopy(const Document& copy); + void assignRvalue(Document&& rValue) noexcept; + void assignRoot(Value root) noexcept; + + std::string m_strings; + std::vector m_values; + + friend Value; + friend DocumentBuilder; + }; + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /* + + json5::ObjectView + + */ + class ObjectView final + { + public: + // Construct an empty object view + ObjectView() noexcept = default; + + // Construct object view over a value. If the provided value does not reference a JSON object, + // this ObjectView will be created empty (and invalid) + explicit ObjectView(const Value& v) noexcept + : m_pair(v.isObject() ? (v.payload() + 1) : nullptr) + , m_count(m_pair ? (m_pair[-1].get() / 2) : 0) + {} + + // Checks, if object view was constructed from valid value + bool isValid() const noexcept { return m_pair != nullptr; } + + using KeyValuePair = std::pair; - return true; -} + class Iterator final + { + public: + explicit Iterator(const Value* p = nullptr) noexcept + : m_pair(p) + {} + bool operator!=(const Iterator& other) const noexcept { return m_pair != other.m_pair; } + bool operator==(const Iterator& other) const noexcept { return m_pair == other.m_pair; } + Iterator& operator++() noexcept + { + m_pair += 2; + return *this; + } + KeyValuePair operator*() const noexcept { return KeyValuePair(m_pair[0].getCStr(), m_pair[1]); } + + private: + const Value* m_pair = nullptr; + }; + + // Get an iterator to the beginning of the object (first key-value pair) + Iterator begin() const noexcept { return Iterator(m_pair); } + + // Get an iterator to the end of the object (past the last key-value pair) + Iterator end() const noexcept { return Iterator(m_pair + m_count * 2); } + + // Find property value with 'key'. Returns end iterator, when not found. + Iterator find(std::string_view key) const noexcept; + + // Get number of key-value pairs + size_t size() const noexcept { return m_count; } + + bool empty() const noexcept { return size() == 0; } + Value operator[](std::string_view key) const noexcept; + + bool operator==(const ObjectView& other) const noexcept; + bool operator!=(const ObjectView& other) const noexcept { return !((*this) == other); } + + private: + const Value* m_pair = nullptr; + size_t m_count = 0; + }; + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /* + + json5::ArrayView + + */ + class ArrayView final + { + public: + // Construct an empty array view + ArrayView() noexcept = default; + + // Construct array view over a value. If the provided value does not reference a JSON array, + // this ArrayView will be created empty (and invalid) + explicit ArrayView(const Value& v) noexcept + : m_value(v.isArray() ? (v.payload() + 1) : nullptr) + , m_count(m_value ? m_value[-1].get() : 0) + {} + + // Checks, if array view was constructed from valid value + bool isValid() const noexcept { return m_value != nullptr; } + + using iterator = const Value*; + + iterator begin() const noexcept { return m_value; } + iterator end() const noexcept { return m_value + m_count; } + size_t size() const noexcept { return m_count; } + bool empty() const noexcept { return m_count == 0; } + Value operator[](size_t index) const noexcept; + + bool operator==(const ArrayView& other) const noexcept; + bool operator!=(const ArrayView& other) const noexcept { return !((*this) == other); } + + private: + const Value* m_value = nullptr; + size_t m_count = 0; + }; + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /* + + json5::IndependentValue + + */ + + // The independent value represents arbitrary values in JSON without any reliance on a document. + class IndependentValue + { + public: + using Map = std::map>; + using Array = std::vector; + using ValueType = std::variant; + + ValueType value; + + bool operator==(const IndependentValue& other) const { return value == other.value; } + }; + + //--------------------------------------------------------------------------------------------------------------------- + inline Value::Value(ValueType t, uint64_t dataIn) + { + if (t == ValueType::Object) + data = TypeObject | dataIn; + else if (t == ValueType::Array) + data = TypeArray | dataIn; + else if (t == ValueType::String) + data = TypeString | dataIn; + else + data = TypeNull; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline ValueType Value::type() const noexcept + { + if ((data & MaskNaNbits) != MaskNaNbits) + return ValueType::Number; + + if ((data & MaskType) == TypeObject) + return ValueType::Object; + else if ((data & MaskType) == TypeArray) + return ValueType::Array; + else if ((data & MaskType) == TypeString) + return ValueType::String; + if (data == TypeTrue || data == TypeFalse) + return ValueType::Boolean; + + return ValueType::Null; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline bool Value::getBool(bool defaultValue) const noexcept + { + if (data == TypeTrue) + return true; + else if (data == TypeFalse) + return false; + + return defaultValue; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline const char* Value::getCStr(const char* defaultValue) const noexcept + { + return isString() ? payload() : defaultValue; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline bool Value::operator==(const Value& other) const noexcept + { + if (auto t = type(); t == other.type()) + { + if (t == ValueType::Null) + return true; + else if (t == ValueType::Boolean) + return data == other.data; + else if (t == ValueType::Number) + return dbl == other.dbl; + else if (t == ValueType::String) + return std::string_view(payload()) == std::string_view(other.payload()); + else if (t == ValueType::Array) + return ArrayView(*this) == ArrayView(other); + else if (t == ValueType::Object) + return ObjectView(*this) == ObjectView(other); + } + + return false; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Value Value::operator[](std::string_view key) const noexcept + { + if (!isObject()) + return Value(); + + ObjectView ov(*this); + return ov[key]; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Value Value::operator[](size_t index) const noexcept + { + if (!isArray()) + return Value(); + + ArrayView av(*this); + return av[index]; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline void Value::relink(const class Document* prevDoc, const class Document& doc) noexcept + { + if (isString()) + { + if (prevDoc) + payload(payload() - prevDoc->m_strings.data()); + + payload(doc.m_strings.data() + payload()); + } + else if (isObject() || isArray()) + { + if (prevDoc) + payload(payload() - prevDoc->m_values.data()); + + payload(doc.m_values.data() + payload()); + } + } + + //--------------------------------------------------------------------------------------------------------------------- + inline void Document::assignCopy(const Document& copy) + { + data = copy.data; + m_strings = copy.m_strings; + m_values = copy.m_values; + + for (auto& v : m_values) + v.relink(©, *this); + + relink(©, *this); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline void Document::assignRvalue(Document&& rValue) noexcept + { + data = std::move(rValue.data); + m_strings = std::move(rValue.m_strings); + m_values = std::move(rValue.m_values); + + for (auto& v : m_values) + v.relink(&rValue, *this); + + for (auto& v : rValue.m_values) + v.relink(this, rValue); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline void Document::assignRoot(Value root) noexcept + { + data = root.data; + + for (auto& v : m_values) + v.relink(nullptr, *this); + + relink(nullptr, *this); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline ObjectView::Iterator ObjectView::find(std::string_view key) const noexcept + { + if (!key.empty()) + { + for (auto iter = begin(); iter != end(); ++iter) + if (key == (*iter).first) + return iter; + } + + return end(); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Value ObjectView::operator[](std::string_view key) const noexcept + { + const auto iter = find(key); + return (iter != end()) ? (*iter).second : Value(); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline bool ObjectView::operator==(const ObjectView& other) const noexcept + { + if (size() != other.size()) + return false; + + if (empty()) + return true; + + static constexpr size_t StackPairCount = 256; + KeyValuePair tempPairs1[StackPairCount]; + KeyValuePair tempPairs2[StackPairCount]; + KeyValuePair* pairs1 = m_count <= StackPairCount ? tempPairs1 : new KeyValuePair[m_count]; + KeyValuePair* pairs2 = m_count <= StackPairCount ? tempPairs2 : new KeyValuePair[m_count]; + { + size_t i = 0; + for (const auto kvp : *this) pairs1[i++] = kvp; + } + { + size_t i = 0; + for (const auto kvp : other) pairs2[i++] = kvp; + } + + const auto comp = [](const KeyValuePair& a, const KeyValuePair& b) noexcept -> bool { + return strcmp(a.first, b.first) < 0; + }; + + std::sort(pairs1, pairs1 + m_count, comp); + std::sort(pairs2, pairs2 + m_count, comp); + + bool result = true; + for (size_t i = 0; i < m_count; ++i) + { + if (strcmp(pairs1[i].first, pairs2[i].first) || pairs1[i].second != pairs2[i].second) + { + result = false; + break; + } + } + + if (m_count > StackPairCount) + { + delete[] pairs1; + delete[] pairs2; + } + return result; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Value ArrayView::operator[](size_t index) const noexcept + { + return (index < m_count) ? m_value[index] : Value(); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline bool ArrayView::operator==(const ArrayView& other) const noexcept + { + if (size() != other.size()) + return false; + + auto iter = begin(); + for (const auto& v : other) + if (*iter++ != v) + return false; + + return true; + } } // namespace json5 diff --git a/include/json5/json5_base.hpp b/include/json5/json5_base.hpp index e8ef3af..7c1f20d 100644 --- a/include/json5/json5_base.hpp +++ b/include/json5/json5_base.hpp @@ -2,212 +2,253 @@ #include +#define JSON5_CLASS_BASE(_Name, _Base, ...) \ + template <> \ + struct json5::detail::Json5Access<_Name> \ + { \ + using SuperCls [[maybe_unused]] = _Base; \ + constexpr static auto GetNames() noexcept \ + { \ + return #__VA_ARGS__; \ + } \ + constexpr static auto GetTie(_Name& out) noexcept \ + { \ + return std::tie(_JSON5_CONCAT(_JSON5_PREFIX_OUT, (__VA_ARGS__))); \ + } \ + constexpr static auto GetTie(const _Name& in) noexcept \ + { \ + return std::tie(_JSON5_CONCAT(_JSON5_PREFIX_IN, (__VA_ARGS__))); \ + } \ + }; + /* - Generates class serialization helper for specified type: + Generates class serialization helper for specified type: - namespace foo { - struct Bar { int x; float y; bool z; }; - } + namespace foo { + struct Bar { int x; float y; bool z; }; + } - JSON5_CLASS(foo::Bar, x, y, z) + JSON5_CLASS(foo::Bar, x, y, z) */ #define JSON5_CLASS(_Name, ...) \ - template <> struct json5::detail::class_wrapper<_Name> { \ - static constexpr const char* names = #__VA_ARGS__; \ - inline static auto make_named_tuple(_Name &out) noexcept { \ - return std::tuple( names, std::tie( _JSON5_CONCAT( _JSON5_PREFIX_OUT, ( __VA_ARGS__ ) ) ) ); \ - } \ - inline static auto make_named_tuple( const _Name &in ) noexcept { \ - return std::tuple( names, std::tie( _JSON5_CONCAT( _JSON5_PREFIX_IN, ( __VA_ARGS__ ) ) ) ); \ - } \ - }; + JSON5_CLASS_BASE(_Name, std::false_type, __VA_ARGS__) /* - Generates class serialization helper for specified type with inheritance: + Generates class serialization helper for specified type with inheritance: - namespace foo { - struct Base { std::string name; }; - struct Bar : Base { int x; float y; bool z; }; - } + namespace foo { + struct Base { std::string name; }; + struct Bar : Base { int x; float y; bool z; }; + } - JSON5_CLASS(foo::Base, name) - JSON5_CLASS_INHERIT(foo::Bar, foo::Base, x, y, z) + JSON5_CLASS(foo::Base, name) + JSON5_CLASS_INHERIT(foo::Bar, foo::Base, x, y, z) */ #define JSON5_CLASS_INHERIT(_Name, _Base, ...) \ - template <> struct json5::detail::class_wrapper<_Name> { \ - static constexpr const char* names = #__VA_ARGS__; \ - inline static auto make_named_tuple(_Name &out) noexcept { \ - return std::tuple_cat( \ - json5::detail::class_wrapper<_Base>::make_named_tuple(out), \ - std::tuple(names, std::tie( _JSON5_CONCAT(_JSON5_PREFIX_OUT, (__VA_ARGS__)) ))); \ - } \ - inline static auto make_named_tuple(const _Name &in) noexcept { \ - return std::tuple_cat( \ - json5::detail::class_wrapper<_Base>::make_named_tuple(in), \ - std::tuple(names, std::tie( _JSON5_CONCAT(_JSON5_PREFIX_IN, (__VA_ARGS__)) ))); \ - } \ - }; + JSON5_CLASS_BASE(_Name, _Base, __VA_ARGS__) + +///////////////////////////////////////////////////////////// + +#define JSON5_MEMBERS_BASE(...) \ + static constexpr std::string_view GetJson5Names() noexcept \ + { \ + return #__VA_ARGS__; \ + } \ + constexpr auto getJson5Tie() noexcept \ + { \ + return std::tie(__VA_ARGS__); \ + } \ + constexpr auto getJson5Tie() const noexcept \ + { \ + return std::tie(__VA_ARGS__); \ + } /* - Generates members serialization helper inside class: - - namespace foo { - struct Bar { - int x; float y; bool z; - JSON5_MEMBERS(x, y, z) - }; - } + Generates members serialization helper inside class: + + namespace foo { + struct Bar { + int x; float y; bool z; + JSON5_MEMBERS(x, y, z) + }; + } */ -#define JSON5_MEMBERS(...) \ - inline auto make_named_tuple() noexcept { \ - return std::tuple((const char*)#__VA_ARGS__, std::tie( __VA_ARGS__ )); } \ - inline auto make_named_tuple() const noexcept { \ - return std::tuple((const char*)#__VA_ARGS__, std::tie( __VA_ARGS__ )); } +#define JSON5_MEMBERS(...) \ + JSON5_MEMBERS_BASE(__VA_ARGS__) \ + using Json5SuperClass [[maybe_unused]] = std::false_type; /* - Generates members serialzation helper inside class with inheritance: - - namespace foo { - struct Base { - std::string name; - JSON5_MEMBERS(name) - }; - - struct Bar : Base { - int x; float y; bool z; - JSON5_MEMBERS_INHERIT(Base, x, y, z) - }; - } + Generates members serialzation helper inside class with inheritance: + + namespace foo { + struct Base { + std::string name; + JSON5_MEMBERS(name) + }; + + struct Bar : Base { + int x; float y; bool z; + JSON5_MEMBERS_INHERIT(Base, x, y, z) + }; + } */ #define JSON5_MEMBERS_INHERIT(_Base, ...) \ - inline auto make_named_tuple() noexcept { \ - return std::tuple_cat( \ - json5::detail::class_wrapper<_Base>::make_named_tuple(*this), \ - std::tuple((const char*)#__VA_ARGS__, std::tie( __VA_ARGS__ ))); } \ - inline auto make_named_tuple() const noexcept { \ - return std::tuple_cat( \ - json5::detail::class_wrapper<_Base>::make_named_tuple(*this), \ - std::tuple((const char*)#__VA_ARGS__, std::tie( __VA_ARGS__ ))); } \ + JSON5_MEMBERS_BASE(__VA_ARGS__) \ + using Json5SuperClass [[maybe_unused]] = _Base; /* - Generates enum wrapper: + Generates enum wrapper: - enum class MyEnum { - One, Two, Three - }; + enum class MyEnum { + One, Two, Three + }; - JSON5_ENUM(MyEnum, One, Two, Three) + JSON5_ENUM(MyEnum, One, Two, Three) */ -#define JSON5_ENUM(_Name, ...) \ - template <> struct json5::detail::enum_table<_Name> : std::true_type { \ - using enum _Name; \ - static constexpr const char* names = #__VA_ARGS__; \ - static constexpr const _Name values[] = { __VA_ARGS__ }; }; +#define JSON5_ENUM(_Name, ...) \ + template <> \ + struct json5::detail::EnumTable<_Name> : std::true_type \ + { \ + using enum _Name; \ + static constexpr const char* Names = #__VA_ARGS__; \ + static constexpr const _Name Values[] = {__VA_ARGS__}; \ + }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -namespace json5 { - -/* Forward declarations */ -class builder; -class document; -class parser; -class value; - -//--------------------------------------------------------------------------------------------------------------------- -struct error final +namespace json5 { - enum - { - none, // no error - invalid_root, // document root is not an object or array - unexpected_end, // unexpected end of JSON data (end of stream, string or file) - syntax_error, // general parsing error - invalid_literal, // invalid literal, only "true", "false", "null" allowed - invalid_escape_seq, // invalid or unsupported string escape \ sequence - comma_expected, // expected comma ',' - colon_expected, // expected color ':' - boolean_expected, // expected boolean literal "true" or "false" - number_expected, // expected number - string_expected, // expected string "..." - object_expected, // expected object { ... } - array_expected, // expected array [ ... ] - wrong_array_size, // invalid number of array elements - invalid_enum, // invalid enum value or string (conversion failed) - could_not_open, // stream is not open - }; - - static constexpr const char *type_string[] = - { - "none", "invalid root", "unexpected end", "syntax error", "invalid literal", - "invalid escape sequence", "comma expected", "colon expected", "boolean expected", - "number expected", "string expected", "object expected", "array expected", - "wrong array size", "invalid enum", "could not open stream", - }; - - int type = none; - int line = 0; - int column = 0; - - operator int() const noexcept { return type; } -}; - -//--------------------------------------------------------------------------------------------------------------------- -struct writer_params -{ - // One level of indentation - const char *indentation = " "; - - // End of line string - const char *eol = "\n"; - - // Write all on single line, omit extra spaces - bool compact = false; - // Write regular JSON (don't use any JSON5 features) - bool json_compatible = false; - - // Escape unicode characters in strings - bool escape_unicode = false; - - // Custom user data pointer - void *user_data = nullptr; -}; - -//--------------------------------------------------------------------------------------------------------------------- -enum class value_type { null = 0, boolean, number, array, string, object }; + /* Forward declarations */ + class Builder; + class Document; + class DocumentBuilder; + class Parser; + class Value; + + //--------------------------------------------------------------------------------------------------------------------- + struct Error final + { + enum Type + { + None, // no error + InvalidRoot, // document root is not an object or array + UnexpectedEnd, // unexpected end of JSON data (end of stream, string or file) + SyntaxError, // general parsing error + InvalidLiteral, // invalid literal, only "true", "false", "null" allowed + InvalidEscapeSeq, // invalid or unsupported string escape \ sequence + CommaExpected, // expected comma ',' + ColonExpected, // expected color ':' + NullExpected, // expected literal "null" + BooleanExpected, // expected boolean literal "true" or "false" + NumberExpected, // expected number + StringExpected, // expected string "..." + ObjectExpected, // expected object { ... } + ArrayExpected, // expected array [ ... ] + WrongArraySize, // invalid number of array elements + InvalidEnum, // invalid enum value or string (conversion failed) + CouldNotOpen, // stream is not open + }; + + static constexpr const char* TypeString[] = + { + "none", + "invalid root", + "unexpected end", + "syntax error", + "invalid literal", + "invalid escape sequence", + "comma expected", + "colon expected", + "null expected", + "boolean expected", + "number expected", + "string expected", + "object expected", + "array expected", + "wrong array size", + "invalid enum", + "could not open stream", + }; + + int type = None; + int line = 0; + int column = 0; + + operator int() const noexcept { return type; } // NOLINT(google-explicit-constructor) + }; + + //--------------------------------------------------------------------------------------------------------------------- + struct WriterParams + { + // One level of indentation + const char* indentation = " "; + + // End of line string + const char* eol = "\n"; + + // Write all on single line, omit extra spaces + bool compact = false; + + // Write regular JSON (don't use any JSON5 features) + bool jsonCompatible = false; + + // Escape unicode characters in strings + bool escapeUnicode = false; + + // Custom user data pointer + void* userData = nullptr; + }; + + //--------------------------------------------------------------------------------------------------------------------- + enum class ValueType + { + Null = 0, + Boolean, + Number, + Array, + String, + Object + }; } // namespace json5 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -namespace json5::detail { +namespace json5::detail +{ -using string_offset = unsigned; + using StringOffset = unsigned; -template struct class_wrapper -{ - inline static auto make_named_tuple( T &in ) noexcept { return in.make_named_tuple(); } - inline static auto make_named_tuple( const T &in ) noexcept { return in.make_named_tuple(); } -}; + template + struct Json5Access + { + using SuperCls = typename T::Json5SuperClass; // Typically compile errors here mean you've forgotten a JSON5_MEMBERS macro in the class + constexpr static auto GetNames() noexcept { return T::GetJson5Names(); } + constexpr static auto GetTie(T& out) noexcept { return out.getJson5Tie(); } + constexpr static auto GetTie(const T& in) noexcept { return in.getJson5Tie(); } + }; -template struct enum_table : std::false_type { }; + template + struct EnumTable : std::false_type + { + }; -class char_source -{ -public: - virtual ~char_source() = default; + class CharSource + { + public: + virtual ~CharSource() = default; - virtual int next() = 0; - virtual int peek() = 0; - virtual bool eof() const = 0; + virtual int next() = 0; + virtual int peek() = 0; + virtual bool eof() const = 0; - error make_error( int type ) const noexcept { return error{ type, _line, _column }; } + Error makeError(int type) const noexcept { return Error {type, m_line, m_column}; } -protected: - int _line = 1; - int _column = 1; -}; + protected: + int m_line = 1; + int m_column = 1; + }; } // namespace json5::detail @@ -219,35 +260,35 @@ class char_source #define _JSON5_JOIN(X, Y) _JSON5_JOIN2(X, Y) #define _JSON5_JOIN2(X, Y) X##Y #define _JSON5_COUNT(...) _JSON5_EXPAND(_JSON5_COUNT2(__VA_ARGS__, \ - 16, 15, 14, 13, 12, 11, 10, 9, \ - 8, 7, 6, 5, 4, 3, 2, 1, )) + 16, 15, 14, 13, 12, 11, 10, 9, \ + 8, 7, 6, 5, 4, 3, 2, 1, )) -#define _JSON5_COUNT2(_, \ - _16, _15, _14, _13, _12, _11, _10, _9, \ - _8, _7, _6, _5, _4, _3, _2, _X, ...) _X +#define _JSON5_COUNT2(_, \ + _16, _15, _14, _13, _12, _11, _10, _9, \ + _8, _7, _6, _5, _4, _3, _2, _X, ...) _X #define _JSON5_FIRST(...) _JSON5_EXPAND(_JSON5_FIRST2(__VA_ARGS__, )) -#define _JSON5_FIRST2(X,...) X +#define _JSON5_FIRST2(X, ...) X #define _JSON5_TAIL(...) _JSON5_EXPAND(_JSON5_TAIL2(__VA_ARGS__)) -#define _JSON5_TAIL2(X,...) (__VA_ARGS__) - -#define _JSON5_CONCAT( _Prefix, _Args) _JSON5_JOIN(_JSON5_CONCAT_,_JSON5_COUNT _Args)(_Prefix, _Args) -#define _JSON5_CONCAT_1( _Prefix, _Args) _Prefix _Args -#define _JSON5_CONCAT_2( _Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_1( _Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_3( _Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_2( _Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_4( _Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_3( _Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_5( _Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_4( _Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_6( _Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_5( _Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_7( _Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_6( _Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_8( _Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_7( _Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_9( _Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_8( _Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_10(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_9( _Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_11(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_10(_Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_12(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_11(_Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_13(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_12(_Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_14(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_13(_Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_15(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_14(_Prefix,_JSON5_TAIL _Args) -#define _JSON5_CONCAT_16(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args),_JSON5_CONCAT_15(_Prefix,_JSON5_TAIL _Args) - -#define _JSON5_PREFIX_IN(_X) in. _X -#define _JSON5_PREFIX_OUT(_X) out. _X +#define _JSON5_TAIL2(X, ...) (__VA_ARGS__) + +#define _JSON5_CONCAT(_Prefix, _Args) _JSON5_JOIN(_JSON5_CONCAT_, _JSON5_COUNT _Args)(_Prefix, _Args) +#define _JSON5_CONCAT_1(_Prefix, _Args) _Prefix _Args +#define _JSON5_CONCAT_2(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_1(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_3(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_2(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_4(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_3(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_5(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_4(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_6(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_5(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_7(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_6(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_8(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_7(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_9(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_8(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_10(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_9(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_11(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_10(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_12(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_11(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_13(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_12(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_14(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_13(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_15(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_14(_Prefix, _JSON5_TAIL _Args) +#define _JSON5_CONCAT_16(_Prefix, _Args) _Prefix(_JSON5_FIRST _Args), _JSON5_CONCAT_15(_Prefix, _JSON5_TAIL _Args) + +#define _JSON5_PREFIX_IN(_X) in._X +#define _JSON5_PREFIX_OUT(_X) out._X diff --git a/include/json5/json5_builder.hpp b/include/json5/json5_builder.hpp index 0e7948d..0d34865 100644 --- a/include/json5/json5_builder.hpp +++ b/include/json5/json5_builder.hpp @@ -2,170 +2,315 @@ #include "json5.hpp" -namespace json5 { - -class builder +namespace json5 { -public: - builder( document &doc ) : _doc( doc ) { } - const document &doc() const noexcept { return _doc; } + //--------------------------------------------------------------------------------------------------------------------- + static inline void StringBufferAddUtf8(std::string& s, uint32_t ch) + { + if (0 <= ch && ch <= 0x7f) + { + s += char(ch); + } + else if (0x80 <= ch && ch <= 0x7ff) + { + s += char(0xc0 | (ch >> 6)); + s += char(0x80 | (ch & 0x3f)); + } + else if (0x800 <= ch && ch <= 0xffff) + { + s += char(0xe0 | (ch >> 12)); + s += char(0x80 | ((ch >> 6) & 0x3f)); + s += char(0x80 | (ch & 0x3f)); + } + else if (0x10000 <= ch && ch <= 0x1fffff) + { + s += char(0xf0 | (ch >> 18)); + s += char(0x80 | ((ch >> 12) & 0x3f)); + s += char(0x80 | ((ch >> 6) & 0x3f)); + s += char(0x80 | (ch & 0x3f)); + } + else if (0x200000 <= ch && ch <= 0x3ffffff) + { + s += char(0xf8 | (ch >> 24)); + s += char(0x80 | ((ch >> 18) & 0x3f)); + s += char(0x80 | ((ch >> 12) & 0x3f)); + s += char(0x80 | ((ch >> 6) & 0x3f)); + s += char(0x80 | (ch & 0x3f)); + } + else if (0x4000000 <= ch && ch <= 0x7fffffff) + { + s += char(0xfc | (ch >> 30)); + s += char(0x80 | ((ch >> 24) & 0x3f)); + s += char(0x80 | ((ch >> 18) & 0x3f)); + s += char(0x80 | ((ch >> 12) & 0x3f)); + s += char(0x80 | ((ch >> 6) & 0x3f)); + s += char(0x80 | (ch & 0x3f)); + } + } - detail::string_offset string_buffer_offset() const noexcept; - detail::string_offset string_buffer_add( std::string_view str ); - void string_buffer_add( char ch ) { _doc._strings.push_back( ch ); } - void string_buffer_add_utf8( uint32_t ch ); + class Builder + { + public: + virtual Error::Type setValue(double number) = 0; + virtual Error::Type setValue(bool boolean) = 0; + virtual Error::Type setValue(std::nullptr_t) = 0; - value new_string( detail::string_offset stringOffset ) { return value( value_type::string, stringOffset ); } - value new_string( std::string_view str ) { return new_string( string_buffer_add( str ) ); } + virtual Error::Type setString() = 0; - void push_object(); - void push_array(); - value pop(); + virtual void stringBufferAdd(char ch) = 0; + virtual void stringBufferAdd(std::string_view str) = 0; + virtual void stringBufferAddUtf8(uint32_t ch) = 0; + virtual void stringBufferEnd() = 0; - builder &operator+=( value v ); - value &operator[]( detail::string_offset keyOffset ); - value &operator[]( std::string_view key ) { return ( *this )[string_buffer_add( key )]; } + virtual Error::Type pushObject() = 0; + virtual Error::Type pushArray() = 0; + virtual Error::Type pop() = 0; -protected: - void reset() noexcept; + virtual void addKey() = 0; + virtual void addKeyedValue() = 0; + virtual void beginArrayValue() = 0; + virtual void addArrayValue() = 0; - document &_doc; - std::vector _stack; - std::vector _values; - std::vector _counts; -}; + virtual bool isValidRoot() = 0; + }; -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + class DocumentBuilder : public Builder + { + public: + explicit DocumentBuilder(Document& doc) + : m_doc(doc) + {} -//--------------------------------------------------------------------------------------------------------------------- -inline detail::string_offset builder::string_buffer_offset() const noexcept -{ - return detail::string_offset( _doc._strings.size() ); -} + Error::Type setValue(double number) override + { + m_currentValue = Value(number); + return Error::None; + } -//--------------------------------------------------------------------------------------------------------------------- -inline detail::string_offset builder::string_buffer_add( std::string_view str ) -{ - auto offset = string_buffer_offset(); - _doc._strings += str; - _doc._strings.push_back( 0 ); - return offset; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline void builder::string_buffer_add_utf8( uint32_t ch ) -{ - auto &s = _doc._strings; - - if ( 0 <= ch && ch <= 0x7f ) - { - s += char( ch ); - } - else if ( 0x80 <= ch && ch <= 0x7ff ) - { - s += char( 0xc0 | ( ch >> 6 ) ); - s += char( 0x80 | ( ch & 0x3f ) ); - } - else if ( 0x800 <= ch && ch <= 0xffff ) - { - s += char( 0xe0 | ( ch >> 12 ) ); - s += char( 0x80 | ( ( ch >> 6 ) & 0x3f ) ); - s += char( 0x80 | ( ch & 0x3f ) ); - } - else if ( 0x10000 <= ch && ch <= 0x1fffff ) - { - s += char( 0xf0 | ( ch >> 18 ) ); - s += char( 0x80 | ( ( ch >> 12 ) & 0x3f ) ); - s += char( 0x80 | ( ( ch >> 6 ) & 0x3f ) ); - s += char( 0x80 | ( ch & 0x3f ) ); - } - else if ( 0x200000 <= ch && ch <= 0x3ffffff ) - { - s += char( 0xf8 | ( ch >> 24 ) ); - s += char( 0x80 | ( ( ch >> 18 ) & 0x3f ) ); - s += char( 0x80 | ( ( ch >> 12 ) & 0x3f ) ); - s += char( 0x80 | ( ( ch >> 6 ) & 0x3f ) ); - s += char( 0x80 | ( ch & 0x3f ) ); - } - else if ( 0x4000000 <= ch && ch <= 0x7fffffff ) - { - s += char( 0xfc | ( ch >> 30 ) ); - s += char( 0x80 | ( ( ch >> 24 ) & 0x3f ) ); - s += char( 0x80 | ( ( ch >> 18 ) & 0x3f ) ); - s += char( 0x80 | ( ( ch >> 12 ) & 0x3f ) ); - s += char( 0x80 | ( ( ch >> 6 ) & 0x3f ) ); - s += char( 0x80 | ( ch & 0x3f ) ); - } -} - -//--------------------------------------------------------------------------------------------------------------------- -inline void builder::push_object() -{ - auto v = value( value_type::object, nullptr ); - _stack.emplace_back( v ); - _counts.push_back( 0 ); -} + Error::Type setValue(bool boolean) override + { + m_currentValue = Value(boolean); + return Error::None; + } -//--------------------------------------------------------------------------------------------------------------------- -inline void builder::push_array() -{ - auto v = value( value_type::array, nullptr ); - _stack.emplace_back( v ); - _counts.push_back( 0 ); -} + Error::Type setValue(std::nullptr_t) override + { + m_currentValue = Value(nullptr); + return Error::None; + } -//--------------------------------------------------------------------------------------------------------------------- -inline value builder::pop() -{ - auto result = _stack.back(); - auto count = _counts.back(); + Error::Type setString() override + { + m_currentValue = Value(ValueType::String, m_doc.m_strings.size()); + return Error::None; + } - result.payload( _doc._values.size() ); + void stringBufferAdd(char ch) override { m_doc.m_strings.push_back(ch); } + void stringBufferAdd(std::string_view str) override + { + m_doc.m_strings += str; + m_doc.m_strings.push_back(0); + } - _doc._values.push_back( value( double( count ) ) ); + void stringBufferAddUtf8(uint32_t ch) override { StringBufferAddUtf8(m_doc.m_strings, ch); } + void stringBufferEnd() override { m_doc.m_strings.push_back(0); } - auto startIndex = _values.size() - count; - for ( size_t i = startIndex, S = _values.size(); i < S; ++i ) - _doc._values.push_back( _values[i] ); + Error::Type pushObject() override + { + auto v = Value(ValueType::Object, nullptr); + m_stack.emplace_back(v); + m_counts.push_back(0); + return Error::None; + } - _values.resize( _values.size() - count ); + Error::Type pushArray() override + { + auto v = Value(ValueType::Array, nullptr); + m_stack.emplace_back(v); + m_counts.push_back(0); + return Error::None; + } - _stack.pop_back(); - _counts.pop_back(); + Error::Type pop() override + { + m_currentValue = m_stack.back(); + auto count = m_counts.back(); - if ( _stack.empty() ) - { - _doc.assign_root( result ); - result = _doc; - } + m_currentValue.payload(m_doc.m_values.size()); - return result; -} + m_doc.m_values.push_back(Value(double(count))); -//--------------------------------------------------------------------------------------------------------------------- -inline builder &builder::operator+=( value v ) -{ - _values.push_back( v ); - _counts.back() += 1; - return *this; -} + auto startIndex = m_values.size() - count; + for (size_t i = startIndex, s = m_values.size(); i < s; ++i) + m_doc.m_values.push_back(m_values[i]); -//--------------------------------------------------------------------------------------------------------------------- -inline value &builder::operator[]( detail::string_offset keyOffset ) -{ - _values.push_back( new_string( keyOffset ) ); - _counts.back() += 2; - return _values.emplace_back(); -} + m_values.resize(m_values.size() - count); -//--------------------------------------------------------------------------------------------------------------------- -inline void builder::reset() noexcept -{ - _doc._data = value::type_null; - _doc._values.clear(); - _doc._strings.clear(); - _doc._strings.push_back( 0 ); -} + m_stack.pop_back(); + m_counts.pop_back(); + + if (m_stack.empty()) + assignRoot(); + + return Error::None; + } + + void assignRoot() + { + m_doc.assignRoot(m_currentValue); + m_currentValue = m_doc; + } + + void addKey() override + { + m_values.push_back(m_currentValue); + m_counts.back()++; + } + + void addKeyedValue() override + { + m_values.push_back(m_currentValue); + m_counts.back()++; + } + + void beginArrayValue() override {} + + void addArrayValue() override + { + m_values.push_back(m_currentValue); + m_counts.back()++; + } + + bool isValidRoot() override + { + return m_doc.isObject() || m_doc.isArray(); + } + + // Used by tests + Value getCurrentValue() const noexcept { return m_currentValue; } + detail::StringOffset stringBufferOffset() const noexcept { return detail::StringOffset(m_doc.m_strings.size()); } + detail::StringOffset stringBufferAddByOffset(std::string_view str) + { + auto offset = stringBufferOffset(); + m_doc.m_strings += str; + m_doc.m_strings.push_back(0); + return offset; + } + + Value newString(detail::StringOffset stringOffset) { return Value(ValueType::String, stringOffset); } + Value newString(std::string_view str) { return newString(stringBufferAddByOffset(str)); } + + Builder& operator+=(Value v) + { + m_values.push_back(v); + m_counts.back() += 1; + return *this; + } + + Value& operator[](detail::StringOffset keyOffset) + { + m_values.push_back(newString(keyOffset)); + m_counts.back() += 2; + return m_values.emplace_back(); + } + + Value& operator[](std::string_view key) { return (*this)[stringBufferAddByOffset(key)]; } + + protected: + Document& m_doc; + Value m_currentValue; + std::vector m_stack; + std::vector m_values; + std::vector m_counts; + }; + + class IndependentValueBuilder : public Builder + { + public: + explicit IndependentValueBuilder(IndependentValue& root) + : m_currentValue(root) + { + m_currentKey.value = ""; + } + + Error::Type setValue(double number) override + { + m_currentValue.get().value = number; + return Error::None; + } + + Error::Type setValue(bool boolean) override + { + m_currentValue.get().value = boolean; + return Error::None; + } + + Error::Type setValue(std::nullptr_t) override + { + m_currentValue.get().value = std::monostate(); + return Error::None; + } + + Error::Type setString() override + { + m_currentValue.get().value = ""; + return Error::None; + } + + void stringBufferAdd(char ch) override { std::get(m_currentValue.get().value).push_back(ch); } + void stringBufferAdd(std::string_view str) override { std::get(m_currentValue.get().value) = str; } + void stringBufferAddUtf8(uint32_t ch) override { StringBufferAddUtf8(std::get(m_currentValue.get().value), ch); } + void stringBufferEnd() override {} + + Error::Type pushObject() override + { + m_currentValue.get().value = IndependentValue::Map(); + m_stack.push_back(m_currentValue); + std::get(m_currentKey.value).clear(); + m_currentValue = m_currentKey; + return Error::None; + } + + Error::Type pushArray() override + { + m_currentValue.get().value = IndependentValue::Array(); + m_stack.push_back(m_currentValue); + return Error::None; + } + + Error::Type pop() override + { + m_currentValue = m_stack.back(); + m_stack.pop_back(); + + return Error::None; + } + + void addKey() override { m_currentValue = std::get(m_stack.back().get().value).insert({std::move(std::get(m_currentKey.value)), {}}).first->second; } + void addKeyedValue() override + { + std::get(m_currentKey.value).clear(); + m_currentValue = m_currentKey; + } + + void beginArrayValue() override + { + auto& array = std::get(m_stack.back().get().value); + array.push_back({}); + m_currentValue = array.back(); + } + + void addArrayValue() override {} + + bool isValidRoot() override + { + return std::get_if(&m_currentValue.get().value) != nullptr || std::get_if(&m_currentValue.get().value) != nullptr; + } + protected: + IndependentValue m_currentKey; + std::reference_wrapper m_currentValue; + std::vector> m_stack; + }; } // namespace json5 diff --git a/include/json5/json5_filter.hpp b/include/json5/json5_filter.hpp index b5acd5e..2f74545 100644 --- a/include/json5/json5_filter.hpp +++ b/include/json5/json5_filter.hpp @@ -1,109 +1,111 @@ #pragma once -#include "json5.hpp" - #include -namespace json5 { +#include "json5.hpp" -// -template void filter( const json5::value &in, std::string_view pattern, Func &&func ); +namespace json5 +{ -// -std::vector filter( const json5::value &in, std::string_view pattern ); + // + template + void Filter(const json5::Value& in, std::string_view pattern, Func&& func); -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // + std::vector Filter(const json5::Value& in, std::string_view pattern); -//--------------------------------------------------------------------------------------------------------------------- -template -inline void filter( const json5::value &in, std::string_view pattern, Func &&func ) -{ - if ( pattern.empty() ) - { - func( in ); - return; - } + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - std::string_view head = pattern; - std::string_view tail = pattern; + //--------------------------------------------------------------------------------------------------------------------- + template + inline void Filter(const json5::Value& in, std::string_view pattern, Func&& func) + { + if (pattern.empty()) + { + func(in); + return; + } - if ( auto slash = pattern.find( "/" ); slash != std::string_view::npos ) - { - head = pattern.substr( 0, slash ); - tail = pattern.substr( slash + 1 ); - } - else - tail = std::string_view(); + std::string_view head = pattern; + std::string_view tail = pattern; - // Trim whitespace - { - while ( !head.empty() && isspace( head.front() ) ) head.remove_prefix( 1 ); - while ( !head.empty() && isspace( head.back() ) ) head.remove_suffix( 1 ); - } + if (auto slash = pattern.find("/"); slash != std::string_view::npos) + { + head = pattern.substr(0, slash); + tail = pattern.substr(slash + 1); + } + else + tail = std::string_view(); - if ( head == "*" ) - { - if ( in.is_object() ) - { - for ( auto kvp : object_view( in ) ) - filter( kvp.second, tail, std::forward( func ) ); - } - else if ( in.is_array() ) - { - for ( auto v : array_view( in ) ) - filter( v, tail, std::forward( func ) ); - } - else - filter( in, std::string_view(), std::forward( func ) ); - } - else if ( head == "**" ) - { - if ( in.is_object() ) - { - filter( in, tail, std::forward( func ) ); + // Trim whitespace + { + while (!head.empty() && isspace(head.front())) head.remove_prefix(1); + while (!head.empty() && isspace(head.back())) head.remove_suffix(1); + } - for ( auto kvp : object_view( in ) ) - { - filter( kvp.second, tail, std::forward( func ) ); - filter( kvp.second, pattern, std::forward( func ) ); - } - } - else if ( in.is_array() ) - { - for ( auto v : array_view( in ) ) - { - filter( v, tail, std::forward( func ) ); - filter( v, pattern, std::forward( func ) ); - } - } - } - else - { - if ( in.is_object() ) - { - // Remove string quotes - if ( head.size() >= 2 ) - { - auto first = head.front(); - if ( ( first == '\'' || first == '"' ) && head.back() == first ) - head = head.substr( 1, head.size() - 2 ); - } + if (head == "*") + { + if (in.isObject()) + { + for (auto kvp : ObjectView(in)) + Filter(kvp.second, tail, std::forward(func)); + } + else if (in.isArray()) + { + for (auto v : ArrayView(in)) + Filter(v, tail, std::forward(func)); + } + else + Filter(in, std::string_view(), std::forward(func)); + } + else if (head == "**") + { + if (in.isObject()) + { + Filter(in, tail, std::forward(func)); - for ( auto kvp : object_view( in ) ) - { - if ( head == kvp.first ) - filter( kvp.second, tail, std::forward( func ) ); - } - } - } -} + for (auto kvp : ObjectView(in)) + { + Filter(kvp.second, tail, std::forward(func)); + Filter(kvp.second, pattern, std::forward(func)); + } + } + else if (in.isArray()) + { + for (auto v : ArrayView(in)) + { + Filter(v, tail, std::forward(func)); + Filter(v, pattern, std::forward(func)); + } + } + } + else + { + if (in.isObject()) + { + // Remove string quotes + if (head.size() >= 2) + { + auto first = head.front(); + if ((first == '\'' || first == '"') && head.back() == first) + head = head.substr(1, head.size() - 2); + } -//--------------------------------------------------------------------------------------------------------------------- -inline std::vector filter( const json5::value &in, std::string_view pattern ) -{ - std::vector result; - filter( in, pattern, [&result]( const value & v ) { result.push_back( v ); } ); - return result; -} + for (auto kvp : ObjectView(in)) + { + if (head == kvp.first) + Filter(kvp.second, tail, std::forward(func)); + } + } + } + } + + //--------------------------------------------------------------------------------------------------------------------- + inline std::vector Filter(const json5::Value& in, std::string_view pattern) + { + std::vector result; + Filter(in, pattern, [&result](const Value& v) { result.push_back(v); }); + return result; + } } // namespace json5 diff --git a/include/json5/json5_input.hpp b/include/json5/json5_input.hpp index 2ac4a48..ec30fee 100644 --- a/include/json5/json5_input.hpp +++ b/include/json5/json5_input.hpp @@ -1,600 +1,674 @@ #pragma once -#include "json5_builder.hpp" - -#if __has_include() - #include - #if !defined(_JSON5_HAS_CHARCONV) - #define _JSON5_HAS_CHARCONV - #endif -#endif - +#include #include #include -namespace json5 { - -// Parse json5::document from stream -error from_stream( std::istream &is, document &doc ); - -// Parse json5::document from string -error from_string( std::string_view str, document &doc ); - -// Parse json5::document from file -error from_file( std::string_view fileName, document &doc ); - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -class parser final : builder -{ -public: - parser( document &doc, detail::char_source &chars ) : builder( doc ), _chars( chars ) { } - - error parse(); - -private: - int next() { return _chars.next(); } - int peek() { return _chars.peek(); } - bool eof() const { return _chars.eof(); } - error make_error( int type ) const noexcept { return _chars.make_error( type ); } - - enum class token_type - { - unknown, identifier, string, number, colon, comma, - object_begin, object_end, array_begin, array_end, - literal_true, literal_false, literal_null - }; - - error parse_value( value &result ); - error parse_object(); - error parse_array(); - error peek_next_token( token_type &result ); - error parse_number( double &result ); - error parse_string( detail::string_offset &result ); - error parse_identifier( detail::string_offset &result ); - error parse_literal( token_type &result ); - - detail::char_source &_chars; -}; - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -namespace detail { - -//--------------------------------------------------------------------------------------------------------------------- -class stl_istream : public char_source -{ -public: - stl_istream( std::istream &is ) : _is( is ) { } - - int next() override - { - if ( _is.peek() == '\n' ) - { - _column = 0; - ++_line; - } - - ++_column; - return _is.get(); - } - - int peek() override { return _is.peek(); } - - bool eof() const override { return _is.eof() || _is.fail(); } - -protected: - std::istream &_is; -}; - -//--------------------------------------------------------------------------------------------------------------------- -class memory_block : public char_source -{ -public: - memory_block( const void* ptr, size_t size ) - : _cursor( reinterpret_cast( ptr ) ) - , _size( ptr ? size : 0 ) - { - - } - - int next() override - { - if ( _size == 0 ) - return -1; - - int ch = uint8_t( *_cursor++ ); - - if ( ch == '\n' ) - { - _column = 0; - ++_line; - } - - ++_column; - --_size; - return ch; - } - - int peek() override - { - if ( _size == 0 ) - return -1; - - return uint8_t( *_cursor ); - } - - bool eof() const override { return _size == 0; } - -protected: - const char* _cursor = nullptr; - size_t _size = 0; -}; - -} // namespace detail - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -//--------------------------------------------------------------------------------------------------------------------- -inline error parser::parse() -{ - reset(); - - if ( auto err = parse_value( _doc ) ) - return err; - - if ( !_doc.is_array() && !_doc.is_object() ) - return make_error( error::invalid_root ); - - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline error parser::parse_value( value &result ) -{ - token_type tt = token_type::unknown; - if ( auto err = peek_next_token( tt ) ) - return err; - - switch ( tt ) - { - case token_type::number: - { - if ( double number = 0.0; auto err = parse_number( number ) ) - return err; - else - result = value( number ); - } - break; - - case token_type::string: - { - if ( detail::string_offset offset = 0; auto err = parse_string( offset ) ) - return err; - else - result = new_string( offset ); - } - break; - - case token_type::identifier: - { - if ( token_type lit = token_type::unknown; auto err = parse_literal( lit ) ) - return err; - else - { - if ( lit == token_type::literal_true ) - result = value( true ); - else if ( lit == token_type::literal_false ) - result = value( false ); - else if ( lit == token_type::literal_null ) - result = value(); - else - return make_error( error::invalid_literal ); - } - } - break; - - case token_type::object_begin: - { - push_object(); - { - if ( auto err = parse_object() ) - return err; - } - result = pop(); - } - break; - - case token_type::array_begin: - { - push_array(); - { - if ( auto err = parse_array() ) - return err; - } - result = pop(); - } - break; - - default: - return make_error( error::syntax_error ); - } - - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline error parser::parse_object() -{ - next(); // Consume '{' - - bool expectComma = false; - while ( !eof() ) - { - token_type tt = token_type::unknown; - if ( auto err = peek_next_token( tt ) ) - return err; - - detail::string_offset keyOffset; - - switch ( tt ) - { - case token_type::identifier: - case token_type::string: - { - if ( expectComma ) - return make_error( error::comma_expected ); - - if ( auto err = parse_identifier( keyOffset ) ) - return err; - } - break; - - case token_type::object_end: - next(); // Consume '}' - return { error::none }; - - case token_type::comma: - if ( !expectComma ) - return make_error( error::syntax_error ); - - next(); // Consume ',' - expectComma = false; - continue; - - default: - return expectComma ? make_error( error::comma_expected ) : make_error( error::syntax_error ); - } - - if ( auto err = peek_next_token( tt ) ) - return err; - - if ( tt != token_type::colon ) - return make_error( error::colon_expected ); - - next(); // Consume ':' - - value newValue; - if ( auto err = parse_value( newValue ) ) - return err; - - ( *this )[keyOffset] = newValue; - expectComma = true; - } - - return make_error( error::unexpected_end ); -} - -//--------------------------------------------------------------------------------------------------------------------- -inline error parser::parse_array() -{ - next(); // Consume '[' - - bool expectComma = false; - while ( !eof() ) - { - token_type tt = token_type::unknown; - if ( auto err = peek_next_token( tt ) ) - return err; - - if ( tt == token_type::array_end && next() ) // Consume ']' - return { error::none }; - else if ( expectComma ) - { - expectComma = false; - - if ( tt != token_type::comma ) - return make_error( error::comma_expected ); - - next(); // Consume ',' - continue; - } - - value newValue; - if ( auto err = parse_value( newValue ) ) - return err; - - ( *this ) += newValue; - expectComma = true; - } - - return make_error( error::unexpected_end ); -} +#include "json5_builder.hpp" -//--------------------------------------------------------------------------------------------------------------------- -inline error parser::peek_next_token( token_type &result ) +namespace json5 { - enum class comment_type { none, line, block } parsingComment = comment_type::none; - - while ( !eof() ) - { - int ch = peek(); - if ( ch == '\n' ) - { - if ( parsingComment == comment_type::line ) - parsingComment = comment_type::none; - } - else if ( parsingComment != comment_type::none || ( ch > 0 && ch <= 32 ) ) - { - if ( parsingComment == comment_type::block && ch == '*' && next() ) // Consume '*' - { - if ( peek() == '/' ) - parsingComment = comment_type::none; - } - } - else if ( ch == '/' && next() ) // Consume '/' - { - if ( peek() == '/' ) - parsingComment = comment_type::line; - else if ( peek() == '*' ) - parsingComment = comment_type::block; - else - return make_error( error::syntax_error ); - } - else if ( strchr( "{}[]:,", ch ) ) - { - if ( ch == '{' ) - result = token_type::object_begin; - else if ( ch == '}' ) - result = token_type::object_end; - else if ( ch == '[' ) - result = token_type::array_begin; - else if ( ch == ']' ) - result = token_type::array_end; - else if ( ch == ':' ) - result = token_type::colon; - else if ( ch == ',' ) - result = token_type::comma; - - return { error::none }; - } - else if ( isalpha( ch ) || ch == '_' ) - { - result = token_type::identifier; - return { error::none }; - } - else if ( isdigit( ch ) || ch == '.' || ch == '+' || ch == '-' ) - { - if ( ch == '+' ) next(); // Consume leading '+' - - result = token_type::number; - return { error::none }; - } - else if ( ch == '"' || ch == '\'' ) - { - result = token_type::string; - return { error::none }; - } - else - return make_error( error::syntax_error ); - - next(); - } - - return make_error( error::unexpected_end ); -} - -//--------------------------------------------------------------------------------------------------------------------- -inline error parser::parse_number( double &result ) -{ - char buff[256] = { }; - size_t length = 0; - - while ( !eof() && length < sizeof( buff ) ) - { - buff[length++] = next(); - int ch = peek(); - if ( ( ch > 0 && ch <= 32 ) || ch == ',' || ch == '}' || ch == ']' ) - break; - } + // Parse json5::Builder from stream + Error FromStream(std::istream& is, Builder& builder); + + // Parse json5::Builder from string + Error FromString(std::string_view str, Builder& builder); + + // Parse json5::Builder from file + Error FromFile(std::string_view fileName, Builder& builder); + + // Parse json5::Document + Error FromStream(std::istream& is, Document& doc); + Error FromString(std::string_view str, Document& doc); + Error FromFile(std::string_view fileName, Document& doc); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + class Parser final + { + public: + Parser(Builder& builder, detail::CharSource& chars) + : m_builder(builder) + , m_chars(chars) + {} + + Error parse(); + + private: + int next() { return m_chars.next(); } + int peek() { return m_chars.peek(); } + bool eof() const { return m_chars.eof(); } + Error makeError(int type) const noexcept { return m_chars.makeError(type); } + + enum class TokenType + { + Unknown, + Identifier, + String, + Number, + Colon, + Comma, + ObjectBegin, + ObjectEnd, + ArrayBegin, + ArrayEnd, + LiteralTrue, + LiteralFalse, + LiteralNull, + LiteralNaN, + }; + + Error parseValue(); + Error parseObject(); + Error parseArray(); + Error peekNextToken(TokenType& result); + Error parseNumber(double& result); + Error parseString(); + Error parseIdentifier(); + Error parseLiteral(TokenType& result); + + Builder& m_builder; + detail::CharSource& m_chars; + }; + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + namespace detail + { + + //--------------------------------------------------------------------------------------------------------------------- + class StlIstream : public CharSource + { + public: + explicit StlIstream(std::istream& is) + : m_is(is) + {} + + int next() override + { + if (m_is.peek() == '\n') + { + m_column = 0; + ++m_line; + } + + ++m_column; + return m_is.get(); + } + + int peek() override { return m_is.peek(); } + + bool eof() const override { return m_is.eof() || m_is.fail(); } + + protected: + std::istream& m_is; + }; + + //--------------------------------------------------------------------------------------------------------------------- + class MemoryBlock : public CharSource + { + public: + MemoryBlock(const void* ptr, size_t size) + : m_cursor(reinterpret_cast(ptr)) + , m_size(ptr ? size : 0) + { + } + + int next() override + { + if (m_size == 0) + return -1; + + int ch = uint8_t(*m_cursor++); + + if (ch == '\n') + { + m_column = 0; + ++m_line; + } + + ++m_column; + --m_size; + return ch; + } + + int peek() override + { + if (m_size == 0) + return -1; + + return uint8_t(*m_cursor); + } + + bool eof() const override { return m_size == 0; } + + protected: + const char* m_cursor = nullptr; + size_t m_size = 0; + }; + + } // namespace detail + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //--------------------------------------------------------------------------------------------------------------------- + inline Error Parser::parse() + { + if (auto err = parseValue()) + return err; + + if (!m_builder.isValidRoot()) + return makeError(Error::InvalidRoot); + + return {Error::None}; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error Parser::parseValue() + { + TokenType tt = TokenType::Unknown; + if (auto err = peekNextToken(tt)) + return err; + + switch (tt) + { + case TokenType::Number: { + if (double number = 0.0; auto err = parseNumber(number)) + return err; + else if (Error::Type errType = m_builder.setValue(number)) + return makeError(errType); + } + break; + + case TokenType::String: { + if (auto err = parseString()) + return err; + } + break; + + case TokenType::Identifier: { + if (TokenType lit = TokenType::Unknown; auto err = parseLiteral(lit)) + return err; + else + { + Error::Type errType; + if (lit == TokenType::LiteralTrue) + errType = m_builder.setValue(true); + else if (lit == TokenType::LiteralFalse) + errType = m_builder.setValue(false); + else if (lit == TokenType::LiteralNull) + errType = m_builder.setValue(nullptr); + else if (lit == TokenType::LiteralNaN) + errType = m_builder.setValue(NAN); + else + return makeError(Error::InvalidLiteral); + + if (errType) + return makeError(errType); + } + } + break; + + case TokenType::ObjectBegin: { + if (Error::Type errType = m_builder.pushObject()) + return makeError(errType); + + { + if (auto err = parseObject()) + return err; + } + if (Error::Type errType = m_builder.pop()) + return makeError(errType); + } + break; + + case TokenType::ArrayBegin: { + if (Error::Type errType = m_builder.pushArray()) + return makeError(errType); + + { + if (auto err = parseArray()) + return err; + } + if (Error::Type errType = m_builder.pop()) + return makeError(errType); + } + break; + + default: + return makeError(Error::SyntaxError); + } + + return {Error::None}; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error Parser::parseObject() + { + next(); // Consume '{' + + bool expectComma = false; + while (!eof()) + { + TokenType tt = TokenType::Unknown; + if (auto err = peekNextToken(tt)) + return err; + + switch (tt) + { + case TokenType::Identifier: + case TokenType::String: { + if (expectComma) + return makeError(Error::CommaExpected); + } + break; + + case TokenType::ObjectEnd: + next(); // Consume '}' + return {Error::None}; + + case TokenType::Comma: + if (!expectComma) + return makeError(Error::SyntaxError); + + next(); // Consume ',' + expectComma = false; + continue; + + default: + return expectComma ? makeError(Error::CommaExpected) : makeError(Error::SyntaxError); + } + + if (auto err = parseIdentifier()) + return err; + + if (auto err = peekNextToken(tt)) + return err; + + if (tt != TokenType::Colon) + return makeError(Error::ColonExpected); + + next(); // Consume ':' + + m_builder.addKey(); + if (auto err = parseValue()) + return err; + + m_builder.addKeyedValue(); + expectComma = true; + } + + return makeError(Error::UnexpectedEnd); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error Parser::parseArray() + { + next(); // Consume '[' + + bool expectComma = false; + while (!eof()) + { + TokenType tt = TokenType::Unknown; + if (auto err = peekNextToken(tt)) + return err; + + if (tt == TokenType::ArrayEnd && next()) // Consume ']' + return {Error::None}; + else if (expectComma) + { + expectComma = false; + + if (tt != TokenType::Comma) + return makeError(Error::CommaExpected); + + next(); // Consume ',' + continue; + } + + m_builder.beginArrayValue(); + if (auto err = parseValue()) + return err; + + m_builder.addArrayValue(); + expectComma = true; + } + + return makeError(Error::UnexpectedEnd); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error Parser::peekNextToken(TokenType& result) + { + enum class CommentType + { + None, + Line, + Block + } parsingComment = CommentType::None; + + while (!eof()) + { + int ch = peek(); + if (ch == '\n') + { + if (parsingComment == CommentType::Line) + parsingComment = CommentType::None; + } + else if (parsingComment != CommentType::None || (ch > 0 && ch <= 32)) + { + if (parsingComment == CommentType::Block && ch == '*' && next()) // Consume '*' + { + if (peek() == '/') + parsingComment = CommentType::None; + } + } + else if (ch == '/' && next()) // Consume '/' + { + if (peek() == '/') + parsingComment = CommentType::Line; + else if (peek() == '*') + parsingComment = CommentType::Block; + else + return makeError(Error::SyntaxError); + } + else if (strchr("{}[]:,", ch)) + { + if (ch == '{') + result = TokenType::ObjectBegin; + else if (ch == '}') + result = TokenType::ObjectEnd; + else if (ch == '[') + result = TokenType::ArrayBegin; + else if (ch == ']') + result = TokenType::ArrayEnd; + else if (ch == ':') + result = TokenType::Colon; + else if (ch == ',') + result = TokenType::Comma; + + return {Error::None}; + } + else if (isalpha(ch) || ch == '_') + { + result = TokenType::Identifier; + return {Error::None}; + } + else if (isdigit(ch) || ch == '.' || ch == '+' || ch == '-') + { + if (ch == '+') + next(); // Consume leading '+' + + result = TokenType::Number; + return {Error::None}; + } + else if (ch == '"' || ch == '\'') + { + result = TokenType::String; + return {Error::None}; + } + else + return makeError(Error::SyntaxError); + + next(); + } + + return makeError(Error::UnexpectedEnd); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error Parser::parseNumber(double& result) + { + char buff[256] = {}; + size_t length = 0; + + while (!eof() && length < sizeof(buff)) + { + buff[length++] = next(); + + int ch = peek(); + if ((ch > 0 && ch <= 32) || ch == ',' || ch == '}' || ch == ']') + break; + } #if defined(_JSON5_HAS_CHARCONV) - auto convResult = std::from_chars( buff, buff + length, result ); + auto convResult = std::from_chars(buff, buff + length, result); - if ( convResult.ec != std::errc() ) - return make_error( error::syntax_error ); + if (convResult.ec != std::errc()) + return makeError(Error::SyntaxError); #else - char *buffEnd = nullptr; - result = strtod( buff, &buffEnd ); + char* buffEnd = nullptr; + result = strtod(buff, &buffEnd); - if ( result == 0.0 && buffEnd == buff ) - return make_error( error::syntax_error ); + if (result == 0.0 && buffEnd == buff) + return makeError(Error::SyntaxError); #endif - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline error parser::parse_string( detail::string_offset &result ) -{ - static const constexpr char *hexChars = "0123456789abcdefABCDEF"; - - bool singleQuoted = peek() == '\''; - next(); // Consume '\'' or '"' - - result = string_buffer_offset(); - - while ( !eof() ) - { - int ch = peek(); - if ( ( ( singleQuoted && ch == '\'' ) || ( !singleQuoted && ch == '"' ) ) && next() ) // Consume '\'' or '"' - break; - else if ( ch == '\\' && next() ) // Consume '\\' - { - ch = peek(); - if ( ch == '\n' || ch == 'v' || ch == 'f' ) - next(); - else if ( ch == 't' && next() ) - string_buffer_add( '\t' ); - else if ( ch == 'n' && next() ) - string_buffer_add( '\n' ); - else if ( ch == 'r' && next() ) - string_buffer_add( '\r' ); - else if ( ch == 'b' && next() ) - string_buffer_add( '\b' ); - else if ( ch == '\\' && next() ) - string_buffer_add( '\\' ); - else if ( ch == '\'' && next() ) - string_buffer_add( '\'' ); - else if ( ch == '"' && next() ) - string_buffer_add( '"' ); - else if ( ch == '\\' && next() ) - string_buffer_add( '\\' ); - else if ( ch == '/' && next() ) - string_buffer_add( '/' ); - else if ( ch == '0' && next() ) - string_buffer_add( 0 ); - else if ( ( ch == 'x' || ch == 'u' ) && next() ) - { - char code[5] = { }; - - for ( size_t i = 0, S = ( ch == 'x' ) ? 2 : 4; i < S; ++i ) - if ( !strchr( hexChars, code[i] = char( next() ) ) ) - return make_error( error::invalid_escape_seq ); - - uint64_t unicodeChar = 0; + return {Error::None}; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error Parser::parseString() + { + static const constexpr char* HexChars = "0123456789abcdefABCDEF"; + + bool singleQuoted = peek() == '\''; + next(); // Consume '\'' or '"' + + if (Error::Type errType = m_builder.setString()) + return makeError(errType); + + while (!eof()) + { + int ch = peek(); + if (((singleQuoted && ch == '\'') || (!singleQuoted && ch == '"'))) + break; + else if (ch == '\\' && next()) // Consume '\\' + { + ch = peek(); + if (ch == '\n' || ch == 'v' || ch == 'f') + next(); + else if (ch == 't' && next()) + m_builder.stringBufferAdd('\t'); + else if (ch == 'n' && next()) + m_builder.stringBufferAdd('\n'); + else if (ch == 'r' && next()) + m_builder.stringBufferAdd('\r'); + else if (ch == 'b' && next()) + m_builder.stringBufferAdd('\b'); + else if (ch == '\\' && next()) + m_builder.stringBufferAdd('\\'); + else if (ch == '\'' && next()) + m_builder.stringBufferAdd('\''); + else if (ch == '"' && next()) + m_builder.stringBufferAdd('"'); + else if (ch == '\\' && next()) + m_builder.stringBufferAdd('\\'); + else if (ch == '/' && next()) + m_builder.stringBufferAdd('/'); + else if (ch == '0' && next()) + m_builder.stringBufferAdd(0); + else if ((ch == 'x' || ch == 'u') && next()) + { + char code[5] = {}; + + for (size_t i = 0, s = (ch == 'x') ? 2 : 4; i < s; ++i) + if (!strchr(HexChars, code[i] = char(next()))) + return makeError(Error::InvalidEscapeSeq); + + uint64_t unicodeChar = 0; #if defined(_JSON5_HAS_CHARCONV) - std::from_chars( code, code + 5, unicodeChar, 16 ); + std::from_chars(code, code + 5, unicodeChar, 16); #else - char *codeEnd = nullptr; - unicodeChar = strtoull( code, &codeEnd, 16 ); + char* codeEnd = nullptr; + unicodeChar = strtoull(code, &codeEnd, 16); - if ( !unicodeChar && codeEnd == code ) - return make_error( error::invalid_escape_seq ); + if (!unicodeChar && codeEnd == code) + return makeError(Error::InvalidEscapeSeq); #endif - string_buffer_add_utf8( uint32_t( unicodeChar ) ); - } - else - return make_error( error::invalid_escape_seq ); - } - else - string_buffer_add( next() ); - } - - if ( eof() ) - return make_error( error::unexpected_end ); - - string_buffer_add( 0 ); - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline error parser::parse_identifier( detail::string_offset &result ) -{ - result = string_buffer_offset(); - - int firstCh = peek(); - bool isString = ( firstCh == '\'' ) || ( firstCh == '"' ); - - if ( isString && next() ) // Consume '\'' or '"' - { - int ch = peek(); - if ( !isalpha( ch ) && ch != '_' ) - return make_error( error::syntax_error ); - } - - while ( !eof() ) - { - string_buffer_add( next() ); - - int ch = peek(); - if ( !isalpha( ch ) && !isdigit( ch ) && ch != '_' ) - break; - } - - if ( isString && firstCh != next() ) // Consume '\'' or '"' - return make_error( error::syntax_error ); - - string_buffer_add( 0 ); - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline error parser::parse_literal( token_type &result ) -{ - int ch = peek(); - - // "true" - if ( ch == 't' ) - { - if ( next() && next() == 'r' && next() == 'u' && next() == 'e' ) - { - result = token_type::literal_true; - return { error::none }; - } - } - // "false" - else if ( ch == 'f' ) - { - if ( next() && next() == 'a' && next() == 'l' && next() == 's' && next() == 'e' ) - { - result = token_type::literal_false; - return { error::none }; - } - } - // "null" - else if ( ch == 'n' ) - { - if ( next() && next() == 'u' && next() == 'l' && next() == 'l' ) - { - result = token_type::literal_null; - return { error::none }; - } - } - - return make_error( error::invalid_literal ); -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -//--------------------------------------------------------------------------------------------------------------------- -inline error from_stream( std::istream &is, document &doc ) -{ - detail::stl_istream src( is ); - parser r( doc, src ); - return r.parse(); -} - -//--------------------------------------------------------------------------------------------------------------------- -inline error from_string( std::string_view str, document &doc ) -{ - detail::memory_block src( str.data(), str.size() ); - parser r( doc, src ); - return r.parse(); -} - -//--------------------------------------------------------------------------------------------------------------------- -inline error from_file( std::string_view fileName, document &doc ) -{ - std::ifstream ifs( std::string( fileName ).c_str() ); - if ( !ifs.is_open() ) - return { error::could_not_open }; - - auto str = std::string( std::istreambuf_iterator( ifs ), std::istreambuf_iterator() ); - return from_string( std::string_view( str ), doc ); -} + m_builder.stringBufferAddUtf8(uint32_t(unicodeChar)); + } + else + return makeError(Error::InvalidEscapeSeq); + } + else + m_builder.stringBufferAdd(next()); + } + + if (eof()) + return makeError(Error::UnexpectedEnd); + + next(); // Consume '\'' or '"' + + m_builder.stringBufferEnd(); + return {Error::None}; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error Parser::parseIdentifier() + { + int firstCh = peek(); + bool isString = (firstCh == '\'') || (firstCh == '"'); + + if (Error::Type errType = m_builder.setString()) + return makeError(errType); + + if (isString) // Use the string parsing function + return parseString(); + + while (!eof()) + { + m_builder.stringBufferAdd(next()); + + int ch = peek(); + if (!isalpha(ch) && !isdigit(ch) && ch != '_') + break; + } + + if (isString && firstCh != next()) // Consume '\'' or '"' + return makeError(Error::SyntaxError); + + m_builder.stringBufferEnd(); + return {Error::None}; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error Parser::parseLiteral(TokenType& result) + { + int ch = peek(); + + // "true" + if (ch == 't') + { + if (next() && next() == 'r' && next() == 'u' && next() == 'e') + { + result = TokenType::LiteralTrue; + return {Error::None}; + } + } + // "false" + else if (ch == 'f') + { + if (next() && next() == 'a' && next() == 'l' && next() == 's' && next() == 'e') + { + result = TokenType::LiteralFalse; + return {Error::None}; + } + } + // "null" + else if (ch == 'n') + { + if (next() && next() == 'u' && next() == 'l' && next() == 'l') + { + result = TokenType::LiteralNull; + return {Error::None}; + } + } + // "NaN" + else if (ch == 'N') + { + if (next() && next() == 'a' && next() == 'N') + { + result = TokenType::LiteralNaN; + return {Error::None}; + } + } + + return makeError(Error::InvalidLiteral); + } + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //--------------------------------------------------------------------------------------------------------------------- + inline Error FromStream(std::istream& is, Builder& builder) + { + detail::StlIstream src(is); + Parser r(builder, src); + return r.parse(); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error FromString(std::string_view str, Builder& builder) + { + detail::MemoryBlock src(str.data(), str.size()); + Parser r(builder, src); + return r.parse(); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error FromFile(std::string_view fileName, Builder& builder) + { + std::ifstream ifs(std::string(fileName).c_str()); + if (!ifs.is_open()) + return {Error::CouldNotOpen}; + + auto str = std::string(std::istreambuf_iterator(ifs), std::istreambuf_iterator()); + return FromString(std::string_view(str), builder); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error FromStream(std::istream& is, Document& doc) + { + DocumentBuilder builder(doc); + return FromStream(is, builder); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error FromString(std::string_view str, Document& doc) + { + DocumentBuilder builder(doc); + return FromString(str, builder); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error FromFile(std::string_view fileName, Document& doc) + { + DocumentBuilder builder(doc); + return FromFile(fileName, builder); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error FromStream(std::istream& is, IndependentValue& value) + { + IndependentValueBuilder builder(value); + return FromStream(is, builder); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error FromString(std::string_view str, IndependentValue& value) + { + IndependentValueBuilder builder(value); + return FromString(str, builder); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline Error FromFile(std::string_view fileName, IndependentValue& value) + { + IndependentValueBuilder builder(value); + return FromFile(fileName, builder); + } } // namespace json5 diff --git a/include/json5/json5_output.hpp b/include/json5/json5_output.hpp index c23bc7c..ded30b7 100644 --- a/include/json5/json5_output.hpp +++ b/include/json5/json5_output.hpp @@ -1,232 +1,422 @@ #pragma once -#include "json5.hpp" - -#include #include +#include +#include #include -namespace json5 { - -// Writes json5::document into stream -void to_stream( std::ostream &os, const document &doc, const writer_params &wp = writer_params() ); - -// Converts json5::document to string -void to_string( std::string &str, const document &doc, const writer_params &wp = writer_params() ); - -// Returns json5::document converted to string -std::string to_string( const document &doc, const writer_params &wp = writer_params() ); - -// Write json5::document into file, returns 'true' on success -bool to_file( const std::string &fileName, const document &doc, const writer_params &wp = writer_params() ); - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -//--------------------------------------------------------------------------------------------------------------------- -inline void to_stream( std::ostream &os, const char *str, char quotes, bool escapeUnicode ) -{ - if ( quotes ) - os << quotes; - - while ( *str ) - { - bool advance = true; - - if ( str[0] == '\n' ) - os << "\\n"; - else if ( str[0] == '\r' ) - os << "\\r"; - else if ( str[0] == '\t' ) - os << "\\t"; - else if ( str[0] == '"' && quotes == '"' ) - os << "\\\""; - else if ( str[0] == '\'' && quotes == '\'' ) - os << "\\'"; - else if ( str[0] == '\\' ) - os << "\\\\"; - else if ( uint8_t( str[0] ) >= 128 && escapeUnicode ) - { - uint32_t ch = 0; - - if ( ( *str & 0b1110'0000u ) == 0b1100'0000u ) - { - ch |= ( ( *str++ ) & 0b0001'1111u ) << 6; - ch |= ( ( *str++ ) & 0b0011'1111u ); - } - else if ( ( *str & 0b1111'0000u ) == 0b1110'0000u ) - { - ch |= ( ( *str++ ) & 0b0000'1111u ) << 12; - ch |= ( ( *str++ ) & 0b0011'1111u ) << 6; - ch |= ( ( *str++ ) & 0b0011'1111u ); - } - else if ( ( *str & 0b1111'1000u ) == 0b1111'0000u ) - { - ch |= ( ( *str++ ) & 0b0000'0111u ) << 18; - ch |= ( ( *str++ ) & 0b0011'1111u ) << 12; - ch |= ( ( *str++ ) & 0b0011'1111u ) << 6; - ch |= ( ( *str++ ) & 0b0011'1111u ); - } - else if ( ( *str & 0b1111'1100u ) == 0b1111'1000u ) - { - ch |= ( ( *str++ ) & 0b0000'0011u ) << 24; - ch |= ( ( *str++ ) & 0b0011'1111u ) << 18; - ch |= ( ( *str++ ) & 0b0011'1111u ) << 12; - ch |= ( ( *str++ ) & 0b0011'1111u ) << 6; - ch |= ( ( *str++ ) & 0b0011'1111u ); - } - else if ( ( *str & 0b1111'1110u ) == 0b1111'1100u ) - { - ch |= ( ( *str++ ) & 0b0000'0001u ) << 30; - ch |= ( ( *str++ ) & 0b0011'1111u ) << 24; - ch |= ( ( *str++ ) & 0b0011'1111u ) << 18; - ch |= ( ( *str++ ) & 0b0011'1111u ) << 12; - ch |= ( ( *str++ ) & 0b0011'1111u ) << 6; - ch |= ( ( *str++ ) & 0b0011'1111u ); - } - - if ( ch <= std::numeric_limits::max() ) - { - os << "\\u" << std::hex << std::setfill( '0' ) << std::setw( 4 ) << ch; - } - else - os << "?"; // JSON can't encode Unicode chars > 65535 (emojis) - - advance = false; - } - else - os << *str; - - if ( advance ) - ++str; - } - - if ( quotes ) - os << quotes; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline void to_stream( std::ostream &os, const value &v, const writer_params &wp, int depth ) -{ - const char *kvSeparator = ": "; - const char *eol = wp.eol; - - if ( wp.compact ) - { - depth = -1; - kvSeparator = ":"; - eol = ""; - } - - if ( v.is_null() ) - os << "null"; - else if ( v.is_boolean() ) - os << ( v.get_bool() ? "true" : "false" ); - else if ( v.is_number() ) - { - if ( double _, d = v.get(); modf( d, &_ ) == 0.0 ) - os << v.get(); - else - os << d; - } - else if ( v.is_string() ) - { - to_stream( os, v.get_c_str(), '"', wp.escape_unicode ); - } - else if ( v.is_array() ) - { - if ( auto av = json5::array_view( v ); !av.empty() ) - { - os << "[" << eol; - for ( size_t i = 0, S = av.size(); i < S; ++i ) - { - for ( int i = 0; i <= depth; ++i ) os << wp.indentation; - to_stream( os, av[i], wp, depth + 1 ); - if ( i < S - 1 ) os << ","; - os << eol; - } - - for ( int i = 0; i < depth; ++i ) os << wp.indentation; - os << "]"; - } - else - os << "[]"; - } - else if ( v.is_object() ) - { - if ( auto ov = json5::object_view( v ); !ov.empty() ) - { - os << "{" << eol; - size_t count = ov.size(); - for ( auto kvp : ov ) - { - for ( int i = 0; i <= depth; ++i ) os << wp.indentation; - - if ( wp.json_compatible ) - os << "\"" << kvp.first << "\"" << kvSeparator; - else - os << kvp.first << kvSeparator; - - to_stream( os, kvp.second, wp, depth + 1 ); - if ( --count ) os << ","; - os << eol; - } - - for ( int i = 0; i < depth; ++i ) os << wp.indentation; - os << "}"; - } - else - os << "{}"; - } - - if ( !depth ) - os << eol; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline void to_stream( std::ostream &os, const document &doc, const writer_params &wp ) -{ - to_stream( os, doc, wp, 0 ); -} - -//--------------------------------------------------------------------------------------------------------------------- -inline void to_string( std::string &str, const document &doc, const writer_params &wp ) -{ - std::ostringstream os; - to_stream( os, doc, wp ); - str = os.str(); -} - -//--------------------------------------------------------------------------------------------------------------------- -inline std::string to_string( const document &doc, const writer_params &wp ) -{ - std::string result; - to_string( result, doc, wp ); - return result; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline bool to_file( const std::string &fileName, const document &doc, const writer_params &wp ) -{ - std::ofstream ofs( fileName ); - if (!ofs.is_open()) - return false; - - to_stream( ofs, doc, wp ); - return true; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline void to_stream( std::ostream &os, const error &err ) -{ - os << err.type_string[err.type] << " at " << err.line << ":" << err.column; -} +#include "json5.hpp" -//--------------------------------------------------------------------------------------------------------------------- -inline std::string to_string( const error &err ) +namespace json5 { - std::ostringstream os; - to_stream( os, err ); - return os.str(); -} + class Writer + { + public: + virtual void writeNull() = 0; + virtual void writeBoolean(bool boolean) = 0; + virtual void writeNumber(double number) = 0; + virtual void writeString(const char* str) = 0; + virtual void writeString(std::string_view str) = 0; + + virtual void beginArray() = 0; + virtual void beginArrayElement() = 0; + virtual void endArray() = 0; + virtual void writeEmptyArray() = 0; + + virtual void beginObject() = 0; + virtual void beginObjectElement() = 0; + virtual void writeObjectKey(const char* str) = 0; + virtual void writeObjectKey(std::string_view str) = 0; + virtual void endObject() = 0; + virtual void writeEmptyObject() = 0; + + virtual void complete() = 0; + }; + + // Writes json5::document into stream + void ToStream(std::ostream& os, const Document& doc, const WriterParams& wp = WriterParams()); + + // Converts json5::document to string + void ToString(std::string& str, const Document& doc, const WriterParams& wp = WriterParams()); + + // Returns json5::document converted to string + std::string ToString(const Document& doc, const WriterParams& wp = WriterParams()); + + // Write json5::document into file, returns 'true' on success + bool ToFile(const std::string& fileName, const Document& doc, const WriterParams& wp = WriterParams()); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + class Json5Writer : public Writer + { + public: + Json5Writer(std::ostream& os, const WriterParams& wp) + : m_os(os) + , m_wp(wp) + { + m_eol = wp.eol; + + if (wp.compact) + { + m_depth = -1; + m_kvSeparator = ":"; + m_eol = ""; + } + } + + void writeNull() override { m_os << "null"; } + void writeBoolean(bool boolean) override { m_os << (boolean ? "true" : "false"); } + void writeNumber(double number) override + { + if (double _; modf(number, &_) == 0.0) + { + m_os << (int64_t)number; + } + else if (isnan(number)) + { + // JSON cannot express NaN so we use null instead to be consistent with JS + if (m_wp.compact) + m_os << "null"; + else + m_os << "NaN"; + } + else + { + m_os << number; + } + } + + void writeString(const char* str) override + { + writeString(str, std::numeric_limits::max(), '"', m_wp.escapeUnicode); + } + + void writeString(std::string_view str) override + { + writeString(str.data(), str.length(), '"', m_wp.escapeUnicode); + } + + void writeString(const char* str, size_t len, char quotes, bool escapeUnicode) + { + if (quotes) + m_os << quotes; + + auto iterate = [&len](char ch) -> bool { + if (len == std::numeric_limits::max()) + return ch; + + return len-- > 0; + }; + + while (iterate(*str)) + { + bool advance = true; + + if (str[0] == '\n') + m_os << "\\n"; + else if (str[0] == '\r') + m_os << "\\r"; + else if (str[0] == '\t') + m_os << "\\t"; + else if (str[0] == '"' && quotes == '"') + m_os << "\\\""; + else if (str[0] == '\'' && quotes == '\'') + m_os << "\\'"; + else if (str[0] == '\\') + m_os << "\\\\"; + else if (str[0] == '\0') + m_os << "\\u0000"; + else if (uint8_t(str[0]) >= 128 && escapeUnicode) + { + uint32_t ch = 0; + size_t additionalReadCharacters = 0; + + if ((*str & 0b1110'0000u) == 0b1100'0000u && len > 0) + { + ch |= ((*str++) & 0b0001'1111u) << 6; + ch |= ((*str++) & 0b0011'1111u); + additionalReadCharacters = 1; + } + else if ((*str & 0b1111'0000u) == 0b1110'0000u && len > 1) + { + ch |= ((*str++) & 0b0000'1111u) << 12; + ch |= ((*str++) & 0b0011'1111u) << 6; + ch |= ((*str++) & 0b0011'1111u); + additionalReadCharacters = 2; + } + else if ((*str & 0b1111'1000u) == 0b1111'0000u && len > 2) + { + ch |= ((*str++) & 0b0000'0111u) << 18; + ch |= ((*str++) & 0b0011'1111u) << 12; + ch |= ((*str++) & 0b0011'1111u) << 6; + ch |= ((*str++) & 0b0011'1111u); + additionalReadCharacters = 3; + } + else if ((*str & 0b1111'1100u) == 0b1111'1000u && len > 3) + { + ch |= ((*str++) & 0b0000'0011u) << 24; + ch |= ((*str++) & 0b0011'1111u) << 18; + ch |= ((*str++) & 0b0011'1111u) << 12; + ch |= ((*str++) & 0b0011'1111u) << 6; + ch |= ((*str++) & 0b0011'1111u); + additionalReadCharacters = 4; + } + else if ((*str & 0b1111'1110u) == 0b1111'1100u && len > 4) + { + ch |= ((*str++) & 0b0000'0001u) << 30; + ch |= ((*str++) & 0b0011'1111u) << 24; + ch |= ((*str++) & 0b0011'1111u) << 18; + ch |= ((*str++) & 0b0011'1111u) << 12; + ch |= ((*str++) & 0b0011'1111u) << 6; + ch |= ((*str++) & 0b0011'1111u); + additionalReadCharacters = 5; + } + + // If we have a length, we need to decremented the length by the additional characters we read + if (len != std::numeric_limits::max()) + len -= additionalReadCharacters; + + if (ch <= std::numeric_limits::max()) + { + // Save stream state that we are going to modify to restore afterwards + // Note: std::setw's change is reset after the << with a numeric type so it doesn't need to be saved + // + std::ios_base::fmtflags flags = m_os.flags(); + std::basic_ios::char_type fill = m_os.fill(); + + m_os << "\\u" << std::hex << std::setfill('0') << std::setw(4) << ch; + + m_os.fill(fill); + m_os.flags(flags); + } + else + m_os << "?"; // JSON can't encode Unicode chars > 65535 (emojis) + + advance = false; + } + else + m_os << *str; + + if (advance) + ++str; + } + + if (quotes) + m_os << quotes; + } + + void push() + { + m_firstElementStack.push_back(m_firstElement); + m_firstElement = true; + if (m_depth != -1) + m_depth++; + } + + void pop() + { + m_firstElement = m_firstElementStack.back(); + m_firstElementStack.pop_back(); + if (m_depth != -1) + m_depth--; + } + + void writeSeparatorAndIndent() + { + if (m_firstElement) + m_firstElement = false; + else + m_os << ","; + + m_os << m_eol; + indent(); + } + + void indent() + { + for (int i = 0; i < m_depth; ++i) m_os << m_wp.indentation; + } + + void beginArray() override + { + push(); + m_os << "["; + } + + void beginArrayElement() override { writeSeparatorAndIndent(); } + + void endArray() override + { + m_os << m_eol; + pop(); + indent(); + m_os << "]"; + } + + void writeEmptyArray() override { m_os << "[]"; } + + void beginObject() override + { + push(); + m_os << "{"; + } + + void writeObjectKey(const char* str) override + { + writeObjectKey(str, std::numeric_limits::max()); + } + + void writeObjectKey(std::string_view str) override + { + writeObjectKey(str.data(), str.length()); + } + + void writeObjectKey(const char* str, size_t len) + { + if (m_wp.jsonCompatible) + { + writeString(str, len, '"', m_wp.escapeUnicode); + m_os << m_kvSeparator; + } + else if (len != std::numeric_limits::max()) + { + m_os << std::string_view(str, len) << m_kvSeparator; + } + else + { + m_os << str << m_kvSeparator; + } + } + + void endObject() override + { + m_os << m_eol; + pop(); + indent(); + m_os << "}"; + } + + void beginObjectElement() override { writeSeparatorAndIndent(); } + void writeEmptyObject() override { m_os << "{}"; } + + void complete() override { m_os << m_eol; } + + protected: + std::ostream& m_os; + const WriterParams& m_wp; + + bool m_firstElement = false; + std::vector m_firstElementStack; + int m_depth = 0; + const char* m_kvSeparator = ": "; + const char* m_eol; + }; + + //--------------------------------------------------------------------------------------------------------------------- + inline void Write(Writer& writer, const Value& v) + { + if (v.isNull()) + { + writer.writeNull(); + } + else if (v.isBoolean()) + { + writer.writeBoolean(v.getBool()); + } + else if (v.isNumber()) + { + writer.writeNumber(v.get()); + } + else if (v.isString()) + { + writer.writeString(v.getCStr()); + } + else if (v.isArray()) + { + if (auto av = json5::ArrayView(v); !av.empty()) + { + writer.beginArray(); + for (size_t i = 0, s = av.size(); i < s; ++i) + { + writer.beginArrayElement(); + Write(writer, av[i]); + } + + writer.endArray(); + } + else + { + writer.writeEmptyArray(); + } + } + else if (v.isObject()) + { + if (auto ov = json5::ObjectView(v); !ov.empty()) + { + writer.beginObject(); + for (auto kvp : ov) + { + writer.beginObjectElement(); + writer.writeObjectKey(kvp.first); + Write(writer, kvp.second); + } + + writer.endObject(); + } + else + { + writer.writeEmptyObject(); + } + } + } + + //--------------------------------------------------------------------------------------------------------------------- + inline void ToStream(std::ostream& os, const Document& doc, const WriterParams& wp) + { + Json5Writer writer(os, wp); + Write(writer, doc); + writer.complete(); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline void ToString(std::string& str, const Document& doc, const WriterParams& wp) + { + std::ostringstream os; + ToStream(os, doc, wp); + str = os.str(); + } + + //--------------------------------------------------------------------------------------------------------------------- + inline std::string ToString(const Document& doc, const WriterParams& wp) + { + std::string result; + ToString(result, doc, wp); + return result; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline bool ToFile(const std::string& fileName, const Document& doc, const WriterParams& wp) + { + std::ofstream ofs(fileName); + if (!ofs.is_open()) + return false; + + ToStream(ofs, doc, wp); + return true; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline void ToStream(std::ostream& os, const Error& err) + { + os << err.TypeString[err.type] << " at " << err.line << ":" << err.column; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline std::string ToString(const Error& err) + { + std::ostringstream os; + ToStream(os, err); + return os.str(); + } } // namespace json5 diff --git a/include/json5/json5_reflect.hpp b/include/json5/json5_reflect.hpp index d11caab..0238401 100644 --- a/include/json5/json5_reflect.hpp +++ b/include/json5/json5_reflect.hpp @@ -1,515 +1,1708 @@ #pragma once -#include "json5_builder.hpp" - #include #include #include +#include +#include #include -namespace json5 { - -// -template void to_document( document &doc, const T &in, const writer_params &wp = writer_params() ); - -// -template void to_stream( std::ostream &os, const T &in, const writer_params &wp = writer_params() ); - -// -template void to_string( std::string &str, const T &in, const writer_params &wp = writer_params() ); - -// -template std::string to_string( const T &in, const writer_params &wp = writer_params() ); - -// -template bool to_file( std::string_view fileName, const T &in, const writer_params &wp = writer_params() ); - -// -template error from_document( const document &doc, T &out ); - -// -template error from_string( std::string_view str, T &out ); - -// -template error from_file( std::string_view fileName, T &out ); - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -namespace detail { - -// Pre-declare so compiler knows it exists before it is attempted to be used -template error read(const json5::value& in, T& out); - -class writer final : public builder -{ -public: - writer( document &doc, const writer_params &wp ): builder( doc ), _params( wp ) { } - - const writer_params ¶ms() const noexcept { return _params; } - -private: - writer_params _params; -}; - -//--------------------------------------------------------------------------------------------------------------------- -inline std::string_view get_name_slice( const char *names, size_t index ) -{ - size_t numCommas = index; - while ( numCommas > 0 && *names ) - if ( *names++ == ',' ) - --numCommas; - - while ( *names && *names <= 32 ) - ++names; - - size_t length = 0; - while ( names[length] > 32 && names[length] != ',' ) - ++length; - - return std::string_view( names, length ); -} - -/* Forward declarations */ -template json5::value write( writer &w, const T &in ); - -//--------------------------------------------------------------------------------------------------------------------- -inline json5::value write( writer &w, bool in ) { return json5::value( in ); } -inline json5::value write( writer &w, int in ) { return json5::value( double( in ) ); } -inline json5::value write( writer &w, unsigned in ) { return json5::value( double( in ) ); } -inline json5::value write( writer &w, float in ) { return json5::value( double( in ) ); } -inline json5::value write( writer &w, double in ) { return json5::value( in ); } -inline json5::value write( writer &w, const char *in ) { return w.new_string( in ); } -inline json5::value write( writer &w, const std::string &in ) { return w.new_string( in ); } - -//--------------------------------------------------------------------------------------------------------------------- -template -inline json5::value write_array( writer &w, const T *in, size_t numItems ) -{ - w.push_array(); - - for ( size_t i = 0; i < numItems; ++i ) - w += write( w, in[i] ); - - return w.pop(); -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline json5::value write( writer &w, const std::vector &in ) { return write_array( w, in.data(), in.size() ); } - -//--------------------------------------------------------------------------------------------------------------------- -template -inline json5::value write( writer &w, const T( &in )[N] ) { return write_array( w, in, N ); } - -//--------------------------------------------------------------------------------------------------------------------- -template -inline json5::value write( writer &w, const std::array &in ) { return write_array( w, in.data(), N ); } - -//--------------------------------------------------------------------------------------------------------------------- -template -inline json5::value write_map( writer &w, const T &in ) -{ - w.push_object(); - - for ( const auto &kvp : in ) - w[kvp.first] = write( w, kvp.second ); - - return w.pop(); -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline json5::value write( writer &w, const std::map &in ) { return write_map( w, in ); } - -template -inline json5::value write( writer &w, const std::unordered_map &in ) { return write_map( w, in ); } - -//--------------------------------------------------------------------------------------------------------------------- -template -inline json5::value write_enum( writer &w, T in ) -{ - size_t index = 0; - const auto *names = enum_table::names; - const auto *values = enum_table::values; - - while ( true ) - { - auto name = get_name_slice( names, index ); - - // Underlying value fallback - if ( name.empty() ) - return write( w, std::underlying_type_t( in ) ); - - if ( in == values[index] ) - return w.new_string( name ); - - ++index; - } - - return json5::value(); -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline void write_tuple( writer &w, const char *names, const std::tuple &t ) -{ - const auto &in = std::get( t ); - using Type = std::remove_const_t>; - - if ( auto name = get_name_slice( names, Index ); !name.empty() ) - { - if constexpr ( std::is_enum_v ) - { - if constexpr ( enum_table() ) - w[name] = write_enum( w, in ); - else - w[name] = write( w, std::underlying_type_t( in ) ); - } - else - w[name] = write( w, in ); - } - - if constexpr ( Index + 1 != sizeof...( Types ) ) - write_tuple < Index + 1 > ( w, names, t ); -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline void write_named_tuple( writer &w, const std::tuple &t ) -{ - write_tuple( w, std::get( t ), std::get < Index + 1 > ( t ) ); - - if constexpr ( Index + 2 != sizeof...( Types ) ) - write_named_tuple < Index + 2 > ( w, t ); -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline json5::value write( writer &w, const T &in ) -{ - w.push_object(); - write_named_tuple( w, class_wrapper::make_named_tuple( in ) ); - return w.pop(); -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -/* Forward declarations */ -template error read( const json5::value &in, T &out ); - -//--------------------------------------------------------------------------------------------------------------------- -inline error read( const json5::value &in, bool &out ) -{ - if ( !in.is_boolean() ) - return { error::number_expected }; - - out = in.get_bool(); - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read_number( const json5::value &in, T &out ) -{ - return in.try_get( out ) ? error() : error{ error::number_expected }; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline error read( const json5::value &in, int &out ) { return read_number( in, out ); } -inline error read( const json5::value &in, unsigned &out ) { return read_number( in, out ); } -inline error read( const json5::value &in, float &out ) { return read_number( in, out ); } -inline error read( const json5::value &in, double &out ) { return read_number( in, out ); } - -//--------------------------------------------------------------------------------------------------------------------- -inline error read( const json5::value &in, const char *&out ) -{ - if ( !in.is_string() ) - return { error::string_expected }; - - out = in.get_c_str(); - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -inline error read( const json5::value &in, std::string &out ) -{ - if ( !in.is_string() ) - return { error::string_expected }; - - out = in.get_c_str(); - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read_array( const json5::value &in, T *out, size_t numItems ) -{ - if ( !in.is_array() ) - return { error::array_expected }; - - auto arr = json5::array_view( in ); - if ( arr.size() != numItems ) - return { error::wrong_array_size }; - - for ( size_t i = 0; i < numItems; ++i ) - if ( auto err = read( arr[i], out[i] ) ) - return err; - - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read( const json5::value &in, T( &out )[N] ) { return read_array( in, out, N ); } - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read( const json5::value &in, std::array &out ) { return read_array( in, out.data(), N ); } - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read( const json5::value &in, std::vector &out ) -{ - if ( !in.is_array() && !in.is_null() ) - return { error::array_expected }; - - auto arr = json5::array_view( in ); - - out.clear(); - out.reserve( arr.size() ); - for ( const auto &i : arr ) - if ( auto err = read( i, out.emplace_back() ) ) - return err; - - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read_map( const json5::value &in, T &out ) -{ - if ( !in.is_object() && !in.is_null() ) - return { error::object_expected }; - - std::pair kvp; - - out.clear(); - for ( auto jsKV : json5::object_view( in ) ) - { - kvp.first = jsKV.first; - - if ( auto err = read( jsKV.second, kvp.second ) ) - return err; - - out.emplace( std::move( kvp ) ); - } - - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read( const json5::value &in, std::map &out ) { return read_map( in, out ); } - -template -inline error read( const json5::value &in, std::unordered_map &out ) { return read_map( in, out ); } - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read_enum( const json5::value &in, T &out ) -{ - if ( !in.is_string() && !in.is_number() ) - return { error::string_expected }; - - size_t index = 0; - const auto *names = enum_table::names; - const auto *values = enum_table::values; - - while ( true ) - { - auto name = get_name_slice( names, index ); - - if ( name.empty() ) - break; - - if ( in.is_string() && name == in.get_c_str() ) - { - out = values[index]; - return { error::none }; - } - else if ( in.is_number() && in.get() == int( values[index] ) ) - { - out = values[index]; - return { error::none }; - } - - ++index; - } - - return { error::invalid_enum }; -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read_tuple( const json5::object_view &obj, const char *names, std::tuple &t ) -{ - auto &out = std::get( t ); - using Type = std::remove_reference_t; - - auto name = get_name_slice( names, Index ); - - auto iter = obj.find( name ); - if ( iter != obj.end() ) - { - if constexpr ( std::is_enum_v ) - { - if constexpr ( enum_table() ) - { - if ( auto err = read_enum( ( *iter ).second, out ) ) - return err; - } - else - { - std::underlying_type_t temp; - if ( auto err = read( ( *iter ).second, temp ) ) - return err; - - out = Type( temp ); - } - } - else - { - if ( auto err = read( ( *iter ).second, out ) ) - return err; - } - } - - if constexpr ( Index + 1 != sizeof...( Types ) ) - { - if ( auto err = read_tuple < Index + 1 > ( obj, names, t ) ) - return err; - } - - return { error::none }; -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read_named_tuple( const json5::object_view &obj, Tuple &t ) -{ - return read_tuple( obj, std::get( t ), std::get < Index + 1 > ( t ) ); -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read( const json5::value &in, T &out ) -{ - if ( !in.is_object() ) - return { error::object_expected }; - - auto namedTuple = class_wrapper::make_named_tuple( out ); - return read_named_tuple( json5::object_view( in ), namedTuple ); -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error read( const json5::array_view &arr, Head &out, Tail &... tail ) -{ - if constexpr ( Index == 0 ) - { - if ( !arr.is_valid() ) - return { error::array_expected }; - - if ( arr.size() != ( 1 + sizeof...( Tail ) ) ) - return { error::wrong_array_size }; - } - - if ( auto err = read( arr[Index], out ) ) - return err; - - if constexpr ( sizeof...( Tail ) > 0 ) - return read < Index + 1 > ( arr, tail... ); - - return { error::none }; -} - -} // namespace detail - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -//--------------------------------------------------------------------------------------------------------------------- -template -inline void to_document( document &doc, const T &in, const writer_params &wp ) -{ - detail::writer w( doc, wp ); - detail::write( w, in ); -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline void to_stream( std::ostream &os, const T &in, const writer_params &wp ) -{ - document doc; - to_document( doc, in, wp ); - to_stream( os, doc, wp ); -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline void to_string( std::string &str, const T &in, const writer_params &wp ) -{ - document doc; - to_document( doc, in ); - to_string( str, doc, wp ); -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline std::string to_string( const T &in, const writer_params &wp ) -{ - std::string result; - to_string( result, in, wp ); - return result; -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline bool to_file( std::string_view fileName, const T &in, const writer_params &wp ) -{ - std::ofstream ofs( std::string( fileName ).c_str() ); - to_stream( ofs, in, wp ); - return true; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error from_document( const document &doc, T &out ) -{ - return detail::read( doc, out ); -} - -//--------------------------------------------------------------------------------------------------------------------- -template -inline error from_string( std::string_view str, T &out ) -{ - document doc; - if ( auto err = from_string( str, doc ) ) - return err; - - return from_document( doc, out ); -} +#include "json5_builder.hpp" +#include "json5_output.hpp" -//--------------------------------------------------------------------------------------------------------------------- -template -inline error from_file( std::string_view fileName, T &out ) +namespace json5 { - document doc; - if ( auto err = from_file( fileName, doc ) ) - return err; - - return from_document( doc, out ); -} -} // json5 + // + template + void ToDocument(Document& doc, const T& in); + + // + template + void ToStream(std::ostream& os, const T& in, const WriterParams& wp = WriterParams()); + + // + template + void ToString(std::string& str, const T& in, const WriterParams& wp = WriterParams()); + + // + template + std::string ToString(const T& in, const WriterParams& wp = WriterParams()); + + // + template + bool ToFile(std::string_view fileName, const T& in, const WriterParams& wp = WriterParams()); + + // + template + Error FromDocument(const Document& doc, T& out); + + // + template + Error FromString(std::string_view str, T& out); + + // + template + Error FromFile(std::string_view fileName, T& out); + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + namespace detail + { + + struct IvarJsonNameSubstitution + { + std::string_view ivarName; + std::string_view jsonName; + }; + + struct WrapperHelper + { + // Several constexpr functions which will not actually be compiled because they only compute constants in the ClassWrapper below + static constexpr size_t CommaCount(std::string_view str) + { + size_t count = 0; + for (char ch : str) + { + if (ch == ',') + count++; + } + + return count; + } + + template + static constexpr std::array GetCommas(std::string_view str) + { + if constexpr (Count == 0) + { + return std::array(); + } + else + { + std::array ret; + size_t index = 0; + size_t pos = 0; + for (char ch : str) + { + if (ch == ',') + { + ret[index] = pos; + index++; + } + + pos++; + } + + return ret; + } + } + + template + static constexpr std::string_view GetName(const std::array& commas, std::string_view namesStr) + { + static_assert(N < Count); + if constexpr (N == 0) + { + if constexpr (Count != 1) + return namesStr.substr(0, commas[0]); + + return namesStr; + } + else + { + size_t start = commas[N - 1]; + + // Advance past comma and whitespace + do { + start++; + } while (namesStr[start] <= 32); + + if constexpr (N != Count - 1) + return namesStr.substr(start, commas[N] - start); + + return namesStr.substr(start); + } + } + + template + static constexpr void FillNames(std::array& ret, const std::array& commas, std::string_view namesStr) + { + ret[N] = GetName(commas, namesStr); + if constexpr (N < Count - 1) + FillNames(ret, commas, namesStr); + } + + template + static constexpr std::array GetNames(const std::array& commas, std::string_view namesStr) + { + static_assert(Count > 0); + std::array ret; + if constexpr (Count == 1) + ret[0] = namesStr; + else + FillNames<0, Count>(ret, commas, namesStr); + + return ret; + } + + template + static constexpr std::array SubstituteNames(std::array names, std::array substitutions) + { + for (size_t substitutionIndex = 0; substitutionIndex < SubstitutionCount; substitutionIndex++) + { + for (size_t nameIndex = 0; nameIndex < Count; nameIndex++) + { + if (names[nameIndex] == substitutions[substitutionIndex].ivarName) + names[nameIndex] = substitutions[substitutionIndex].jsonName; + } + } + + return names; + } + }; + + template + struct NameSubstitution + { + static constexpr std::array Substitutions = {}; + }; + + template + class ClassWrapper : public Json5Access + { + public: + // Constants for use in actual compiled functions + static constexpr std::string_view NamesStr = Json5Access::GetNames(); + static constexpr size_t NameCount = WrapperHelper::CommaCount(NamesStr) + 1; + static constexpr std::array Commas = WrapperHelper::GetCommas(NamesStr); + static constexpr std::array Names = WrapperHelper::SubstituteNames(WrapperHelper::GetNames(Commas, NamesStr), NameSubstitution::Substitutions); + + // Some sanity checks + static_assert(NameCount == std::tuple_size_v::GetTie(std::declval()))>); + static_assert(NameCount == std::tuple_size_v::GetTie(std::declval()))>); + }; + + template + class EnumWrapper : public EnumTable + { + public: + // Constants for use in actual compiled functions + static constexpr size_t NameCount = WrapperHelper::CommaCount(EnumTable::Names) + 1; + static constexpr std::array Commas = WrapperHelper::GetCommas(EnumTable::Names); + static constexpr std::array Names = WrapperHelper::GetNames(Commas, EnumTable::Names); + + // Sanity check + static_assert(NameCount == std::size(EnumTable::Values)); + }; + + /* Forward declarations */ + template + inline void Write(Writer& w, const T& in); + template + inline void WriteObjTuples(Writer& w, const T& in); + template + void WriteArray(Writer& w, const T* in, size_t numItems); + template + void WriteMap(Writer& w, const T& in); + template + void WriteEnum(Writer& w, T in); + + //--------------------------------------------------------------------------------------------------------------------- + template + struct ReflectionWriter + { + static inline void Write(Writer& w, const T& in) + { + w.beginObject(); + WriteObjTuples(w, in); + w.endObject(); + } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template <> + struct ReflectionWriter + { + static inline void Write(Writer& w, std::monostate in) { w.writeNull(); } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template + struct ReflectionWriter>> + { + static inline void Write(Writer& w, T in) + { + if constexpr (std::is_integral_v) + assert(in < (1LL << 53)); + + w.writeNumber((double)in); + } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template <> + struct ReflectionWriter + { + static inline void Write(Writer& w, bool in) { w.writeBoolean(in); } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template <> + struct ReflectionWriter + { + static inline void Write(Writer& w, const char* in) { w.writeString(in); } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template <> + struct ReflectionWriter + { + static inline void Write(Writer& w, const std::string& in) { w.writeString(in); } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template + struct ReflectionWriter> + { + static inline void Write(Writer& w, const std::vector& in) { WriteArray(w, in.data(), in.size()); } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template + struct ReflectionWriter> + { + static inline void Write(Writer& w, const std::vector& in) + { + w.beginArray(); + for (size_t i = 0; i < in.size(); ++i) + { + w.beginArrayElement(); + ReflectionWriter::Write(w, (bool)in[i]); + } + + w.endArray(); + } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template + struct ReflectionWriter + { + static inline void Write(Writer& w, const T (&in)[N]) { return WriteArray(w, in, N); } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template + struct ReflectionWriter> + { + static inline void Write(Writer& w, const std::array& in) { return WriteArray(w, in.data(), N); } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template + struct ReflectionWriter> + { + static inline void Write(Writer& w, const std::map& in) { WriteMap(w, in); } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template + struct ReflectionWriter> + { + static inline void Write(Writer& w, const std::unordered_map& in) { WriteMap(w, in); } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template + struct ReflectionWriter> + { + static inline void Write(Writer& w, const std::multimap& in) + { + w.beginObject(); + + if (!in.empty()) + { + std::optional> lastKey; + + for (const auto& pair : in) + { + if (!lastKey || lastKey->get() != pair.first) + { + if (lastKey) + w.endArray(); + + w.beginObjectElement(); + w.writeObjectKey(pair.first); + w.beginArray(); + + lastKey = std::reference_wrapper(pair.first); + } + + w.beginArrayElement(); + ReflectionWriter::Write(w, pair.second); + } + + w.endArray(); + } + + w.endObject(); + } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template + class ReflectionWriter> + { + public: + static inline void Write(Writer& w, const std::variant& in) + { + std::visit([&w](const auto& value) { ReflectionWriter>::Write(w, value); }, in); + } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template + class ReflectionWriter> + { + public: + static inline void Write(Writer& w, const std::shared_ptr& in) + { + if (in) + ReflectionWriter::Write(w, *in); + else + w.writeNull(); + } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template <> + struct ReflectionWriter + { + public: + static inline void Write(Writer& w, const IndependentValue& value) { ReflectionWriter::Write(w, value.value); } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template <> + struct ReflectionWriter + { + static inline void Write(Writer& w, const Document& in) { json5::Write(w, (const Value&)in); } + }; + + //--------------------------------------------------------------------------------------------------------------------- + class TupleWriter + { + public: + template + static inline void Write(Writer& w, const FirstType& first, const RemainingTypes&... remaining) + { + w.beginArrayElement(); + json5::detail::Write(w, first); + TupleWriter::Write(w, remaining...); + } + + template + static inline void Write(Writer& w, const OnlyType& only) + { + w.beginArrayElement(); + json5::detail::Write(w, only); + } + }; + + template + class TupleReflectionWriter + { + public: + static inline void Write(Writer& w, const Types&... obj) + { + w.beginArray(); + TupleWriter::Write(w, obj...); + w.endArray(); + } + }; + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void WriteTupleValue(Writer& w, std::string_view name, const Type& in) + { + w.beginObjectElement(); + w.writeObjectKey(name); + + if constexpr (std::is_enum_v) + { + if constexpr (EnumTable()) + WriteEnum(w, in); + else + ReflectionWriter>::Write(w, std::underlying_type_t(in)); + } + else + { + ReflectionWriter::Write(w, in); + } + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void WriteTupleValue(Writer& w, std::string_view name, const std::optional& in) + { + if (in) + WriteTupleValue(w, name, *in); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void WriteTupleValue(Writer& w, std::string_view name, const std::shared_ptr& in) + { + if (in) + WriteTupleValue(w, name, *in); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void WriteTuple(Writer& w, const std::tuple& t) + { + const auto& in = std::get(t); + using Type = std::decay_t; + + WriteTupleValue(w, ClassWrapper::Names[Index], in); + if constexpr (Index + 1 != sizeof...(Types)) + WriteTuple(w, t); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void WriteObjTuples(Writer& w, const T& in) + { + WriteTuple(w, ClassWrapper::GetTie(in)); + + if constexpr (!std::is_same_v::SuperCls, std::false_type>) + WriteObjTuples::SuperCls>(w, in); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void Write(Writer& w, const T& in) + { + ReflectionWriter::Write(w, in); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void WriteArray(Writer& w, const T* in, size_t numItems) + { + w.beginArray(); + + for (size_t i = 0; i < numItems; ++i) + { + w.beginArrayElement(); + Write(w, in[i]); + } + + w.endArray(); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void WriteMap(Writer& w, const T& in) + { + w.beginObject(); + + for (const auto& kvp : in) + { + w.beginObjectElement(); + w.writeObjectKey(kvp.first); + Write(w, kvp.second); + } + + w.endObject(); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline bool WriteEnumValue(Writer& w, T in) + { + if (in == EnumTable::Values[Index]) + { + w.writeString(EnumWrapper::Names[Index]); + return true; + } + + if constexpr (Index + 1 != std::size(EnumTable::Values)) + return WriteEnumValue(w, in); + + return false; + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void WriteEnum(Writer& w, T in) + { + if (!WriteEnumValue(w, in)) + Write(w, std::underlying_type_t(in)); // Not in table so fallback to underlying value + } + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + class BaseReflector + { + public: + static bool AllowsType(ValueType type) { return false; } + + virtual ~BaseReflector() {} + virtual Error::Type getNonTypeError() = 0; + virtual Error::Type setValue(double number) { return getNonTypeError(); } + virtual Error::Type setValue(bool boolean) { return getNonTypeError(); } + virtual Error::Type setValue(std::nullptr_t) { return getNonTypeError(); } + + virtual bool allowString() { return false; } + virtual void setValue(std::string str) { throw std::logic_error("Attempt to set string on non string value"); } + + virtual bool allowObject() { return false; } + virtual std::unique_ptr getReflectorForKey(std::string key) { throw std::logic_error("Attempt to get object item on non object value"); } + virtual bool allowArray() { return false; } + virtual std::unique_ptr getReflectorInArray() { throw std::logic_error("Attempt to get array item on non array value"); } + + virtual Error::Type complete() { return Error::None; } + }; + + class IgnoreReflector : public BaseReflector + { + public: + Error::Type getNonTypeError() override { return Error::None; } + Error::Type setValue(double number) override { return Error::None; } + Error::Type setValue(bool boolean) override { return Error::None; } + Error::Type setValue(std::nullptr_t) override { return Error::None; } + + bool allowString() override { return true; } + void setValue(std::string) override {} + + bool allowObject() override { return true; } + std::unique_ptr getReflectorForKey(std::string key) override { return std::make_unique(); } + bool allowArray() override { return true; } + std::unique_ptr getReflectorInArray() override { return std::make_unique(); } + }; + + template + class RefReflector : public BaseReflector + { + public: + explicit RefReflector(T& obj) + : m_obj(obj) + {} + + protected: + T& m_obj; + }; + + template + class Reflector : public RefReflector + { + public: + using RefReflector::RefReflector; + using RefReflector::m_obj; + + static bool AllowsType(ValueType type) { return type == ValueType::Object; } + Error::Type getNonTypeError() override { return Error::ObjectExpected; } + + bool allowObject() override { return true; } + std::unique_ptr getReflectorForKey(std::string key) override { return GetValueReflector(m_obj, key); } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline static std::unique_ptr MakeReflector(ValueType& in) + { + return std::make_unique>(in); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline static std::unique_ptr GetValueReflectorInType(T& in, std::string_view name) + { + if (name == ClassWrapper::Names[Index]) + return MakeReflector(std::get(Json5Access::GetTie(in))); + else if constexpr (Index < ClassWrapper::NameCount - 1) + return GetValueReflectorInType(in, name); + else + return {}; + } + + //--------------------------------------------------------------------------------------------------------------------- + inline static std::unique_ptr GetValueReflector(T& in, std::string_view name) + { + if (std::unique_ptr reflector = GetValueReflectorInType(in, name)) + return reflector; + + if constexpr (!std::is_same_v::SuperCls, std::false_type>) + return Reflector::SuperCls>::GetValueReflector(in, name); + + return std::make_unique(); + } + }; + + template <> + class Reflector : public RefReflector + { + public: + using RefReflector::RefReflector; + static bool AllowsType(ValueType type) { return type == ValueType::Null; } + Error::Type getNonTypeError() override { return Error::NullExpected; } + Error::Type setValue(std::nullptr_t) override { return Error::None; } + }; + + template + class Reflector> : public RefReflector> + { + public: + using OptType = std::optional; + using RefReflector::m_obj; + + static T& MakeInnerRef(OptType& opt) + { + opt = std::optional(std::in_place); + return *opt; + } + + explicit Reflector(OptType& obj) + : RefReflector(obj) + , m_inner(MakeInnerRef(obj)) + {} + + static bool AllowsType(ValueType type) { return Reflector::AllowsType(type); } + Error::Type getNonTypeError() override { return m_inner.getNonTypeError(); } + Error::Type setValue(double number) override { return m_inner.setValue(number); } + Error::Type setValue(bool boolean) override { return m_inner.setValue(boolean); } + Error::Type setValue(std::nullptr_t) override + { + if (m_inner.setValue(nullptr) != Error::None) + m_obj = std::nullopt; + + return Error::None; + } + + bool allowString() override { return m_inner.allowString(); } + void setValue(std::string str) override { m_inner.setValue(std::move(str)); } + + bool allowObject() override { return m_inner.allowObject(); } + std::unique_ptr getReflectorForKey(std::string key) override { return m_inner.getReflectorForKey(std::move(key)); } + bool allowArray() override { return m_inner.allowArray(); } + std::unique_ptr getReflectorInArray() override { return m_inner.getReflectorInArray(); } + Error::Type complete() override { return m_inner.complete(); } + + protected: + Reflector m_inner; + }; + + template + class Reflector> : public RefReflector> + { + public: + using PtrType = std::shared_ptr; + using RefReflector::m_obj; + + static T& MakeInnerRef(PtrType& ptr) + { + if (!ptr) + ptr = std::make_shared(); + + return *ptr; + } + + explicit Reflector(PtrType& obj) + : RefReflector(obj) + , m_inner(MakeInnerRef(obj)) + {} + + static bool AllowsType(ValueType type) { return Reflector::AllowsType(type); } + Error::Type getNonTypeError() override { return m_inner.getNonTypeError(); } + Error::Type setValue(double number) override { return m_inner.setValue(number); } + Error::Type setValue(bool boolean) override { return m_inner.setValue(boolean); } + Error::Type setValue(std::nullptr_t) override + { + if (m_inner.setValue(nullptr) != Error::None) + m_obj.reset(); + + return Error::None; + } + + bool allowString() override { return m_inner.allowString(); } + void setValue(std::string str) override { m_inner.setValue(std::move(str)); } + + bool allowObject() override { return m_inner.allowObject(); } + std::unique_ptr getReflectorForKey(std::string key) override { return m_inner.getReflectorForKey(std::move(key)); } + bool allowArray() override { return m_inner.allowArray(); } + std::unique_ptr getReflectorInArray() override { return m_inner.getReflectorInArray(); } + Error::Type complete() override { return m_inner.complete(); } + + protected: + Reflector m_inner; + }; + + template + class Reflector>> : public RefReflector + { + public: + using RefReflector::RefReflector; + using RefReflector::m_obj; + using RefReflector::setValue; + + static bool AllowsType(ValueType type) { return type == ValueType::Number || type == ValueType::String; } + Error::Type getNonTypeError() override { return Error::NumberExpected; } + Error::Type setValue(double number) override + { + m_obj = (T)number; + return Error::None; + } + + bool allowString() override { return true; } + void setValue(std::string str) override + { + if constexpr (EnumTable()) + { + for (size_t index = 0; index < sizeof(EnumWrapper::Names); index++) + { + if (str == EnumWrapper::Names[index]) + { + m_obj = EnumTable::Values[index]; + return; + } + } + + m_err = Error::InvalidEnum; + } + } + + Error::Type complete() override { return m_err; } + + protected: + Error::Type m_err = Error::None; + }; + + template + class Reflector && !std::is_same_v>> : public RefReflector + { + public: + using RefReflector::RefReflector; + using RefReflector::m_obj; + using RefReflector::setValue; + + static bool AllowsType(ValueType type) + { + if constexpr (!std::is_integral_v) + return type == ValueType::Number || type == ValueType::Null; + + return type == ValueType::Number; + } + + Error::Type getNonTypeError() override { return Error::NumberExpected; } + Error::Type setValue(std::nullptr_t) override + { + if constexpr (std::is_integral_v) + { + return getNonTypeError(); + } + else + { + m_obj = NAN; + return Error::None; + } + } + + Error::Type setValue(double number) override + { + m_obj = number; + return Error::None; + } + }; + + template <> + class Reflector : public RefReflector + { + public: + using RefReflector::RefReflector; + using RefReflector::m_obj; + using RefReflector::setValue; + + static bool AllowsType(ValueType type) { return type == ValueType::Boolean; } + Error::Type getNonTypeError() override { return Error::BooleanExpected; } + Error::Type setValue(bool boolean) override + { + m_obj = boolean; + return Error::None; + } + }; + + template <> + class Reflector::reference> : public BaseReflector + { + public: + explicit Reflector(std::vector::reference ref) + : m_obj(std::move(ref)) + {} + + static bool AllowsType(ValueType type) { return type == ValueType::Boolean; } + Error::Type getNonTypeError() override { return Error::BooleanExpected; } + Error::Type setValue(bool boolean) override + { + m_obj = boolean; + return Error::None; + } + + protected: + std::vector::reference m_obj; + }; + + template <> + class Reflector : public RefReflector + { + public: + using RefReflector::RefReflector; + using RefReflector::m_obj; + using RefReflector::setValue; + + static bool AllowsType(ValueType type) { return type == ValueType::String; } + Error::Type getNonTypeError() override { return Error::StringExpected; } + bool allowString() override { return true; } + void setValue(std::string str) override { m_obj = std::move(str); } + }; + + template + class Reflector> : public RefReflector> + { + public: + using RefReflector>::m_obj; + + explicit Reflector(std::vector& obj) + : RefReflector>::RefReflector(obj) + { + m_obj.clear(); + } + + static bool AllowsType(ValueType type) { return type == ValueType::Array; } + Error::Type getNonTypeError() override { return Error::ArrayExpected; } + bool allowArray() override { return true; } + std::unique_ptr getReflectorInArray() override + { + m_obj.push_back({}); + if constexpr (std::is_same_v) + return std::make_unique::reference>>(m_obj.back()); + else + return std::make_unique>(m_obj.back()); + } + }; + + template + class ArrayReflector : public RefReflector + { + public: + using RefReflector::RefReflector; + using RefReflector::m_obj; + + static bool AllowsType(ValueType type) { return type == ValueType::Array; } + Error::Type getNonTypeError() override { return Error::ArrayExpected; } + bool allowArray() override { return true; } + std::unique_ptr getReflectorInArray() override + { + if (m_nextIndex == N) + { + return std::unique_ptr(); + m_wrongSize = true; + } + + m_nextIndex++; + return std::make_unique>(m_obj[m_nextIndex - 1]); + } + + Error::Type complete() override + { + if (m_wrongSize || m_nextIndex != N) + return Error::WrongArraySize; + + return Error::None; + } + + protected: + size_t m_nextIndex = 0; + bool m_wrongSize = false; + }; + + template + class Reflector : public ArrayReflector + { + public: + using ArrayReflector::ArrayReflector; + }; + + template + class Reflector> : public ArrayReflector, T, N> + { + public: + using ArrayReflector, T, N>::ArrayReflector; + }; + + template + class MapReflector : public RefReflector + { + public: + using RefReflector::m_obj; + + explicit MapReflector(ContainerType& obj) + : RefReflector::RefReflector(obj) + { + m_obj.clear(); + } + + static bool AllowsType(ValueType type) { return type == ValueType::Object; } + Error::Type getNonTypeError() override { return Error::ObjectExpected; } + bool allowObject() override { return true; } + std::unique_ptr getReflectorForKey(std::string key) override + { + return std::make_unique>(m_obj[std::move(key)]); + } + }; + + template + class Reflector> : public MapReflector, K, T> + { + public: + using MapReflector, K, T>::MapReflector; + }; + + template + class Reflector> : public MapReflector, K, T> + { + public: + using MapReflector, K, T>::MapReflector; + }; + + // Reads into a variant using the first type that can take the type of value. + // So, if you have a std::variant where both are JSON objects, + // it will always attempt to read the object into ObjType1. + // + template + class Reflector> : public RefReflector> + { + public: + using VariantType = std::variant; + using RefReflector::RefReflector; + using RefReflector::m_obj; + + static bool AllowsType(ValueType type) { return VariantAllowsType<>(type); } + Error::Type getNonTypeError() override { return GetNonTypeError(); } + + Error::Type setValue(double number) override + { + if (!setupReflector<>(ValueType::Number)) + return getNonTypeError(); + + return m_reflector->setValue(number); + } + + Error::Type setValue(bool boolean) override + { + if (!setupReflector<>(ValueType::Boolean)) + return getNonTypeError(); + + return m_reflector->setValue(boolean); + } + + Error::Type setValue(std::nullptr_t) override + { + if (!setupReflector<>(ValueType::Null)) + return getNonTypeError(); + + return m_reflector->setValue(nullptr); + } + + bool allowString() override + { + if (!setupReflector<>(ValueType::String)) + return false; + + return m_reflector->allowString(); + } + + void setValue(std::string str) override { m_reflector->setValue(std::move(str)); } + + bool allowObject() override + { + if (!setupReflector<>(ValueType::Object)) + return false; + + return m_reflector->allowObject(); + } + + std::unique_ptr getReflectorForKey(std::string key) override { return m_reflector->getReflectorForKey(std::move(key)); } + + bool allowArray() override + { + if (!setupReflector<>(ValueType::Array)) + return false; + + return m_reflector->allowArray(); + } + + std::unique_ptr getReflectorInArray() override { return m_reflector->getReflectorInArray(); } + + Error::Type complete() override { return m_reflector->complete(); } + + protected: + template + static bool VariantAllowsType(ValueType type) + { + if constexpr (N == std::variant_size_v) + { + return false; + } + else + { + using Type = std::decay_t(VariantType()))>; + if (Reflector::AllowsType(type)) + return true; + + return VariantAllowsType(type); + } + } + + template + static Error::Type GetNonTypeError() + { + FirstType dummy; + return Reflector(dummy).getNonTypeError(); + } + + template + bool makeReflector(ValueType type) + { + if (!Reflector::AllowsType(type)) + return false; + + m_obj = VariantType(std::in_place_type); + m_reflector = std::make_unique>(std::get(m_obj)); + return true; + } + + template + bool setupReflector(ValueType type) + { + if constexpr (N == std::variant_size_v) + { + return false; + } + else + { + using Type = std::decay_t(VariantType()))>; + if (makeReflector(type)) + return true; + + return setupReflector(type); + } + } + + std::unique_ptr m_reflector; + }; + template + class Reflector> : public RefReflector> + { + public: + using Type = std::multimap; + using RefReflector::RefReflector; + using RefReflector::m_obj; + + static bool AllowsType(ValueType type) { return type == ValueType::Object; } + Error::Type getNonTypeError() override { return Error::ObjectExpected; } + bool allowObject() override { return true; } + std::unique_ptr getReflectorForKey(std::string key) override + { + insertLast(); + m_lastKey = std::move(key); + return std::make_unique>>(m_insertValues); + } + + Error::Type complete() override + { + insertLast(); + return Error::None; + } + + void insertLast() + { + for (T& value : m_insertValues) + m_obj.insert({m_lastKey, std::move(value)}); + + m_lastKey.clear(); + m_insertValues.clear(); + } + + protected: + K m_lastKey; + std::vector m_insertValues; + }; + + class DocumentBuilderReflector : public RefReflector + { + public: + using RefReflector::m_obj; + + DocumentBuilderReflector(DocumentBuilder& builder, bool objectValue, bool arrayValue, bool root = false) + : RefReflector(builder) + , m_objectValue(objectValue) + , m_arrayValue(arrayValue) + , m_root(root) + {} + + ~DocumentBuilderReflector() override + { + if (m_needPop) + m_obj.pop(); + else if (m_root) + m_obj.assignRoot(); // The root is assigned on the top-level array or object pop but we want to allow other json type roots in this case + + if (m_objectValue) + m_obj.addKeyedValue(); + if (m_arrayValue) + m_obj.addArrayValue(); + } + + Error::Type getNonTypeError() override { return Error::ObjectExpected; } + Error::Type setValue(double number) override + { + m_obj.setValue(number); + return Error::None; + } + + Error::Type setValue(bool boolean) override + { + m_obj.setValue(boolean); + return Error::None; + } + + Error::Type setValue(std::nullptr_t) override + { + m_obj.setValue(nullptr); + return Error::None; + } + + bool allowString() override + { + m_obj.setString(); + return true; + } + + void setValue(std::string str) override + { + m_obj.stringBufferAdd(str); + m_obj.stringBufferEnd(); + } + + bool allowObject() override + { + m_obj.pushObject(); + m_needPop = true; + return true; + } + + std::unique_ptr getReflectorForKey(std::string key) override + { + m_obj.setString(); + m_obj.stringBufferAdd(key); + m_obj.addKey(); + return std::make_unique(m_obj, true, false); + } + + bool allowArray() override + { + m_obj.pushArray(); + m_needPop = true; + return true; + } + + std::unique_ptr getReflectorInArray() override + { + return std::make_unique(m_obj, false, true); + } + + protected: + bool m_needPop = false; + bool m_arrayValue = false; + bool m_objectValue = false; + bool m_root = false; + }; + + template <> + class Reflector : public RefReflector + { + public: + using RefReflector::m_obj; + + explicit Reflector(Document& doc) + : RefReflector::RefReflector(doc) + , m_builder(m_obj) + , m_builderReflector(m_builder, false, false, true) + {} + + static bool AllowsType(ValueType type) { return true; } + Error::Type getNonTypeError() override { return m_builderReflector.getNonTypeError(); } + Error::Type setValue(double number) override { return m_builderReflector.setValue(number); } + Error::Type setValue(bool boolean) override { return m_builderReflector.setValue(boolean); } + Error::Type setValue(std::nullptr_t) override { return m_builderReflector.setValue(nullptr); } + + bool allowString() override { return m_builderReflector.allowString(); } + void setValue(std::string str) override { return m_builderReflector.setValue(std::move(str)); } + + bool allowObject() override { return m_builderReflector.allowObject(); } + std::unique_ptr getReflectorForKey(std::string key) override { return m_builderReflector.getReflectorForKey(std::move(key)); } + + bool allowArray() override { return m_builderReflector.allowArray(); } + std::unique_ptr getReflectorInArray() override { return m_builderReflector.getReflectorInArray(); } + + protected: + DocumentBuilder m_builder; + DocumentBuilderReflector m_builderReflector; + }; + + template <> + class Reflector : public Reflector + { + public: + explicit Reflector(IndependentValue& obj) + : Reflector(obj.value) + {} + }; + + class BaseTupleComponent + { + public: + virtual std::optional> next() = 0; + virtual std::unique_ptr reflector() = 0; + }; + + template + class TupleComponentRef : public BaseTupleComponent + { + public: + explicit TupleComponentRef(T& obj) + : m_obj(obj) + {} + + std::unique_ptr reflector() override { return std::make_unique>(m_obj); } + + protected: + T& m_obj; + }; + + template + class RefsTuple : public TupleComponentRef + { + public: + explicit RefsTuple(FirstType& first, RemainingTypes&... remaining) + : TupleComponentRef(first) + , m_remaining(remaining...) + {} + + std::optional> next() override { return m_remaining; } + + protected: + RefsTuple m_remaining; + }; + + template + class RefsTuple : public TupleComponentRef + { + public: + explicit RefsTuple(OnlyType& only) + : TupleComponentRef(only) + {} + + std::optional> next() override { return std::nullopt; } + }; + + template + class TupleReflector : public BaseReflector + { + public: + explicit TupleReflector(Types&... obj) + : m_components(obj...) + {} + + static bool AllowsType(ValueType type) { return type == ValueType::Array; } + Error::Type getNonTypeError() override { return Error::ArrayExpected; } + bool allowArray() override { return true; } + std::unique_ptr getReflectorInArray() override + { + m_writtenElements++; + + if (!m_current) + m_current = m_components; + else if (auto next = m_current->get().next()) + m_current = *next; + else + return std::make_unique(); + + return m_current->get().reflector(); + } + + Error::Type complete() override + { + if (m_writtenElements != sizeof...(Types)) + return Error::WrongArraySize; + + return Error::None; + } + + protected: + size_t m_writtenElements = 0; + std::optional> m_current; + RefsTuple m_components; + }; + } // namespace detail + + class ReflectionBuilder : public Builder + { + public: + template + explicit ReflectionBuilder(T& obj) + { + m_stack.push_back(std::make_unique>(obj)); + } + + Error::Type setValue(double number) override { return m_stack.back()->setValue(number); } + Error::Type setValue(bool boolean) override { return m_stack.back()->setValue(boolean); } + Error::Type setValue(std::nullptr_t) override { return m_stack.back()->setValue(nullptr); } + + Error::Type setString() override + { + m_str.clear(); + if (m_processingKey) + return Error::None; + + if (!m_stack.back()->allowString()) + return m_stack.back()->getNonTypeError(); + + return Error::None; + } + + void stringBufferAdd(char ch) override { m_str.push_back(ch); } + void stringBufferAdd(std::string_view str) override { m_str = std::string(str); } + void stringBufferAddUtf8(uint32_t ch) override { StringBufferAddUtf8(m_str, ch); } + void stringBufferEnd() override + { + if (m_processingKey) + return; + + m_stack.back()->setValue(std::move(m_str)); + } + + Error::Type pushObject() override + { + if (!m_stack.back()->allowObject()) + return m_stack.back()->getNonTypeError(); + + m_processingKey = true; + return Error::None; + } + + Error::Type pushArray() override + { + if (!m_stack.back()->allowArray()) + return m_stack.back()->getNonTypeError(); + + return Error::None; + } + + Error::Type pop() override { return m_stack.back()->complete(); } + + void addKey() override + { + m_processingKey = false; + m_stack.push_back(m_stack.back()->getReflectorForKey(std::move(m_str))); + m_str.clear(); + } + + void addKeyedValue() override + { + m_processingKey = true; + m_stack.pop_back(); + } + + void beginArrayValue() override { m_stack.push_back(m_stack.back()->getReflectorInArray()); } + void addArrayValue() override { m_stack.pop_back(); } + + bool isValidRoot() override { return true; } + + protected: + bool m_processingKey = false; + std::string m_str; + std::vector> m_stack; + }; + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + class DocumentWriter : public Writer + { + public: + explicit DocumentWriter(Document& doc) + : m_builder(doc) + {} + + void writeNull() override { m_builder.setValue(nullptr); } + void writeBoolean(bool boolean) override { m_builder.setValue(boolean); } + void writeNumber(double number) override { m_builder.setValue(number); } + + void writeString(const char* str) override + { + m_builder.setString(); + m_builder.stringBufferAdd(str); + } + void writeString(std::string_view str) override + { + m_builder.setString(); + m_builder.stringBufferAdd(str); + } + + void push() + { + m_firstElementStack.push_back(m_firstElement); + m_firstElement = true; + } + + void pop() + { + m_firstElement = m_firstElementStack.back(); + m_firstElementStack.pop_back(); + } + + void beginArray() override + { + push(); + m_builder.pushArray(); + } + + void beginArrayElement() override + { + if (!m_firstElement) + m_builder.addArrayValue(); + else + m_firstElement = false; + } + + void endArray() override + { + if (!m_firstElement) + m_builder.addArrayValue(); + + pop(); + m_builder.pop(); + } + + void writeEmptyArray() override + { + m_builder.pushArray(); + m_builder.pop(); + } + + void beginObject() override + { + push(); + m_builder.pushObject(); + } + + void writeObjectKey(const char* str) override + { + m_builder.setString(); + m_builder.stringBufferAdd(str); + m_builder.addKey(); + } + + void writeObjectKey(std::string_view str) override + { + m_builder.setString(); + m_builder.stringBufferAdd(str); + m_builder.addKey(); + } + + void beginObjectElement() override + { + if (!m_firstElement) + m_builder.addKeyedValue(); + else + m_firstElement = false; + } + + void endObject() override + { + if (!m_firstElement) + m_builder.addKeyedValue(); + + pop(); + m_builder.pop(); + } + + void writeEmptyObject() override + { + m_builder.pushObject(); + m_builder.pop(); + } + + void complete() override {} + + protected: + bool m_firstElement = false; + std::vector m_firstElementStack; + DocumentBuilder m_builder; + }; + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void ToDocument(Document& doc, const T& in) + { + DocumentWriter writer(doc); + detail::Write(writer, in); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void ToStream(std::ostream& os, const T& in, const WriterParams& wp) + { + Json5Writer writer(os, wp); + detail::Write(writer, in); + writer.complete(); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline void ToString(std::string& str, const T& in, const WriterParams& wp) + { + std::ostringstream os; + ToStream(os, in, wp); + str = os.str(); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline std::string ToString(const T& in, const WriterParams& wp) + { + std::string result; + ToString(result, in, wp); + return result; + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline bool ToFile(std::string_view fileName, const T& in, const WriterParams& wp) + { + std::ofstream ofs(std::string(fileName).c_str()); + ToStream(ofs, in, wp); + return true; + } + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + class DocumentParser final + { + public: + DocumentParser(Builder& builder, const Document& doc) + : m_builder(builder) + , m_doc(doc) + {} + + Error parse() + { + return parseValue(m_doc); + } + + Error parseValue(const Value& v) + { + if (v.isNumber()) + return {m_builder.setValue(v.get())}; + if (v.isBoolean()) + return {m_builder.setValue(v.getBool())}; + if (v.isNull()) + return {m_builder.setValue(nullptr)}; + + if (v.isString()) + { + if (Error::Type err = m_builder.setString()) + return {err}; + + m_builder.stringBufferAdd(v.getCStr()); + m_builder.stringBufferEnd(); + return {Error::None}; + } + + if (v.isObject()) + { + if (Error::Type err = m_builder.pushObject()) + return {err}; + + for (auto kvp : ObjectView(v)) + { + if (Error::Type err = m_builder.setString()) + return {err}; + + m_builder.stringBufferAdd(kvp.first); + m_builder.stringBufferEnd(); + m_builder.addKey(); + + if (Error err = parseValue(kvp.second)) + return err; + + m_builder.addKeyedValue(); + } + + return {m_builder.pop()}; + } + + if (v.isArray()) + { + if (Error::Type err = m_builder.pushArray()) + return {err}; + + for (auto inner : ArrayView(v)) + { + if (Error err = parseValue(inner)) + return err; + + m_builder.addArrayValue(); + } + + return {m_builder.pop()}; + } + + return {Error::SyntaxError}; + } + + protected: + Builder& m_builder; + const Document& m_doc; + }; + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //--------------------------------------------------------------------------------------------------------------------- + template + inline Error FromDocument(const Document& doc, T& out) + { + ReflectionBuilder builder(out); + DocumentParser p(builder, doc); + return p.parse(); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline Error FromString(std::string_view str, T& out) + { + ReflectionBuilder builder(out); + return FromString(str, (Builder&)builder); + } + + //--------------------------------------------------------------------------------------------------------------------- + template + inline Error FromFile(std::string_view fileName, T& out) + { + ReflectionBuilder builder(out); + return FromFile(fileName, (Builder&)builder); + } + +} // namespace json5 diff --git a/test/Foo.json5 b/test/Foo.json5 deleted file mode 100644 index d5de77a..0000000 --- a/test/Foo.json5 +++ /dev/null @@ -1,37 +0,0 @@ -{ - x: 123, - y: 456, - z: true, - text: "Hello, world!", - numbers: [ - 1, - 2, - 3, - 4, - 5 - ], - barMap: { - x: { - name: "a", - age: 1 - }, - y: { - name: "b", - age: 2 - }, - z: { - name: "c", - age: 3 - } - }, - position: [ - 10, - 20, - 30 - ], - bar: { - name: "Somebody Unknown", - age: 500 - }, - e: "Second" -} diff --git a/test/Json5UtilsTests.cpp b/test/Json5UtilsTests.cpp new file mode 100644 index 0000000..ac5ef4c --- /dev/null +++ b/test/Json5UtilsTests.cpp @@ -0,0 +1,1058 @@ +#include + +#include "include/json5/json5.hpp" +#include "include/json5/json5_input.hpp" +#include "include/json5/json5_output.hpp" +#include "include/json5/json5_reflect.hpp" + +///////////////////////////////////////////////////////////////////////////////////////// +// Uncomment if you want to run this standalone +// #define DEFINE_MAIN + +#ifdef DEFINE_MAIN +#if defined(_MSC_VER) && GTEST_LINKED_AS_SHARED_LIBRARY +int main(int argc, char **argv) +#else +GTEST_API_ int main(int argc, char **argv) +#endif +{ + printf("Running main() from gtest_main.cc\n"); + testing::InitGoogleTest(&argc, argv); + int result = RUN_ALL_TESTS(); + + // Ensure the output is actually printed + fflush(stdout); + fflush(stderr); + _Exit(result); +} + +#ifdef _WIN32 + +void PROGRESS_DisplayDialog(const char* message) {} +void PROGRESS_UpdateProcess(int percentComplete) {} + +void SERVER_StopServer() {} +void SERVER_ShowErrorDialogAndExit(int titleId, int textId) {} + +#endif + +#endif // DEFINE_MAIN + +///////////////////////////////////////////////////////////////////////////////////////// +constexpr json5::WriterParams JSONCompatWriteParams { + "", + "", + true, + true, + true, + nullptr, +}; + +using namespace std::string_literals; +using namespace std::string_view_literals; +namespace fs = std::filesystem; + +///////////////////////////////////////////////////////////////////////////////////////// +bool PrintError(const json5::Error& err) +{ + if (err) + { + std::cout << json5::ToString(err) << std::endl; + return true; + } + + return false; +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, Build) +{ + json5::Document doc; + json5::DocumentBuilder b(doc); + + b.pushObject(); + { + b["x"] = b.newString("Hello!"); + b["y"] = json5::Value(123.0); + b["z"] = json5::Value(true); + + b.pushArray(); + { + b += b.newString("a"); + b += b.newString("b"); + b += b.newString("c"); + } + b.pop(); + b["arr"] = b.getCurrentValue(); + } + b.pop(); + + std::string expected = R"({ + x: "Hello!", + y: 123, + z: true, + arr: [ + "a", + "b", + "c" + ] +} +)"; + EXPECT_EQ(json5::ToString(doc), expected); +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, LoadFromFile) +{ + json5::Document doc; + fs::path path = "short_example.json5"; + PrintError(json5::FromFile(path.string(), doc)); + + std::string expected = R"({ + unquoted: "and you can quote me on that", + singleQuotes: "I can use \"double quotes\" here", + lineBreaks: "Look, Mom! No \\n's!", + leadingDecimalPoint: 0.867531, + andTrailing: 8675309, + positiveSign: 1, + trailingComma: "in objects", + andIn: [ + "arrays" + ], + backwardsCompatible: "with JSON" +} +)"; + EXPECT_EQ(json5::ToString(doc), expected); +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, Equality) +{ + json5::Document doc1; + json5::FromString("{ x: 1, y: 2, z: 3 }", doc1); + + json5::Document doc2; + json5::FromString("{ z: 3, x: 1, y: 2 }", doc2); + + EXPECT_EQ(doc1, doc2); +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, FileSaveLoad) +{ + json5::Document doc1; + json5::Document doc2; + fs::path path = "twitter.json"; + PrintError(json5::FromFile(path.string(), doc1)); + + { + json5::WriterParams wp; + wp.compact = true; + + json5::ToFile("twitter.json5", doc1, wp); + } + + json5::FromFile("twitter.json5", doc2); + + EXPECT_EQ(doc1, doc2); +} + +///////////////////////////////////////////////////////////////////////////////////////// + +// This requires a newer compiler than our current clang +// enum class MyEnum +// { +// Zero, +// First, +// Second, +// Third +// }; + +// JSON5_ENUM(MyEnum, Zero, First, Second, Third) + +///////////////////////////////////////////////////////////////////////////////////////// +struct BarBase +{ + std::string name; +}; + +JSON5_CLASS(BarBase, name) + +///////////////////////////////////////////////////////////////////////////////////////// +struct Bar : BarBase +{ + int age = 0; + bool operator==(const Bar& o) const { return std::tie(name, age) == std::tie(o.name, o.age); } +}; + +JSON5_CLASS_INHERIT(Bar, BarBase, age) + +struct Foo +{ + int x = 0; + float y = 0; + bool z = false; + std::string text; + std::vector numbers; + std::map barMap; + + std::array position = {0.0f, 0.0f, 0.0f}; + + Bar bar; + // MyEnum e; + + JSON5_MEMBERS(x, y, z, text, numbers, barMap, position, bar /*, e*/) + bool operator==(const Foo& o) const noexcept { return std::tie(x, y, z, text, numbers, barMap, position, bar /*, e*/) == std::tie(o.x, o.y, o.z, o.text, o.numbers, o.barMap, o.position, o.bar /*, o.e*/); } +}; + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, LowLevelReflection) +{ + { + int i; + json5::ReflectionBuilder builder(i); + json5::Error err = FromString("5", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_EQ(i, 5); + + err = FromString("null", (json5::Builder&)builder); + EXPECT_TRUE(err); + } + + { + unsigned long l; + json5::ReflectionBuilder builder(l); + json5::Error err = FromString("5555", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_EQ(l, 5555); + } + + { + long l; + json5::ReflectionBuilder builder(l); + json5::Error err = FromString("5555", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_EQ(l, 5555); + } + + { + unsigned long long l; + json5::ReflectionBuilder builder(l); + json5::Error err = FromString("5555", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_EQ(l, 5555); + } + + { + long long l; + json5::ReflectionBuilder builder(l); + json5::Error err = FromString("5555", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_EQ(l, 5555); + } + + { + double d; + json5::ReflectionBuilder builder(d); + json5::Error err = FromString("5.5", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_EQ(d, 5.5); + + err = FromString("null", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_TRUE(isnan(d)); + } + + { + std::string str; + json5::ReflectionBuilder builder(str); + json5::Error err = FromString("\"Hahaha\"", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_EQ(str, "Hahaha"); + } + + { + std::vector v; + json5::ReflectionBuilder builder(v); + json5::Error err = FromString("[\"Hahaha\",\"Hoho\"]", (json5::Builder&)builder); + EXPECT_FALSE(err); + std::vector expected = { + "Hahaha", + "Hoho", + }; + EXPECT_EQ(v, expected); + } + + { + std::map m; + json5::ReflectionBuilder builder(m); + json5::Error err = FromString("{\"Hahaha\":3,\"Hoho\":2}", (json5::Builder&)builder); + EXPECT_FALSE(err); + std::map expected = { + {"Hahaha", 3}, + {"Hoho", 2}, + }; + EXPECT_EQ(m, expected); + } + + { + std::multimap m; + json5::ReflectionBuilder builder(m); + json5::Error err = FromString("{\"First\":[\"1\", \"2\"],\"Second\":[\"3\"]}", (json5::Builder&)builder); + EXPECT_FALSE(err); + std::multimap expected = { + {"First", "1"}, + {"First", "2"}, + {"Second", "3"}, + }; + EXPECT_EQ(m, expected); + } + + // { + // MyEnum e; + // json5::ReflectionBuilder builder(e); + // json5::Error err = FromString("\"Third\"", (json5::Builder&)builder); + // EXPECT_FALSE(err); + // EXPECT_EQ(e, MyEnum::Third); + // } + + { + std::optional o; + json5::ReflectionBuilder builder(o); + json5::Error err = FromString("5", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_TRUE(o); + EXPECT_EQ(*o, 5); + + err = json5::FromString("null", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_FALSE(o.has_value()); + } + + { + std::optional o; + json5::ReflectionBuilder builder(o); + json5::Error err = FromString("5.5", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_TRUE(o); + EXPECT_EQ(*o, 5.5); + + err = json5::FromString("null", (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_TRUE(o.has_value()); + EXPECT_TRUE(isnan(*o)); + } + + { + Foo foo1 = + { + 123, + 456.0f, + true, + "Hello, world!", + {1, 2, 3, 4, 5}, + {{"x", {{"a"}, 1}}, {"y", {{"b"}, 2}}, {"z", {{"c"}, 3}}}, + {10.0f, 20.0f, 30.0f}, + {{"Somebody Unknown"}, 500}, + // MyEnum::Second, + }; + + auto str = json5::ToString(foo1); + + Foo foo2; + json5::ReflectionBuilder builder(foo2); + json5::Error err = FromString(str, (json5::Builder&)builder); + EXPECT_FALSE(err); + EXPECT_EQ(foo1, foo2); + } +} + +struct OptIvar +{ + std::optional val; + + JSON5_MEMBERS(val); +}; + +struct DocumentContainer +{ + json5::Document nesting; + json5::Document array; + json5::Document null; + json5::Document boolean; + json5::Document number; + json5::Document str; + int count; + + JSON5_MEMBERS(nesting, array, null, boolean, number, str, count); +}; + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, Reflection) +{ + Foo foo1 = + { + 123, + 456.0f, + true, + "Hello, world!", + {1, 2, 3, 4, 5}, + {{"x", {{"a"}, 1}}, {"y", {{"b"}, 2}}, {"z", {{"c"}, 3}}}, + {10.0f, 20.0f, 30.0f}, + {{"Somebody Unknown"}, 500}, + // MyEnum::Second, + }; + + json5::ToFile("Foo.json5", foo1); + + Foo foo2; + json5::FromFile("Foo.json5", foo2); + + EXPECT_EQ(foo1, foo2); + + json5::Document doc; + json5::ToDocument(doc, foo1); + json5::ToFile("Foo2.json5", doc); + + Foo foo3; + json5::FromFile("Foo2.json5", foo3); + + EXPECT_EQ(foo1, foo3); + + { + json5::IndependentValue indepententFoo; + json5::Error err = FromFile("Foo.json5", indepententFoo); + EXPECT_FALSE(err); + + json5::IndependentValue expected = {json5::IndependentValue::Map { + {"x", {123.0}}, + {"y", {456.0}}, + {"z", {true}}, + {"text", {"Hello, world!"}}, + {"numbers", + {json5::IndependentValue::Array { + {1.0}, + {2.0}, + {3.0}, + {4.0}, + {5.0}, + }}}, + {"barMap", + {json5::IndependentValue::Map { + {"x", + {json5::IndependentValue::Map { + {"name", {"a"}}, + {"age", {1.0}}, + }}}, + {"y", + {json5::IndependentValue::Map { + {"name", {"b"}}, + {"age", {2.0}}, + }}}, + {"z", + {json5::IndependentValue::Map { + {"name", {"c"}}, + {"age", {3.0}}, + }}}, + }}}, + {"position", + {json5::IndependentValue::Array { + {10.0}, + {20.0}, + {30.0}, + }}}, + {"bar", + {{json5::IndependentValue::Map { + {"name", {"Somebody Unknown"}}, + {"age", {500.0}}, + }}}}, + // {"e", {"Second"}}, + }}; + EXPECT_EQ(indepententFoo, expected); + } + + { + OptIvar empty; + std::string emptyStr = json5::ToString(empty); + std::string emptyExpected = R"({ +} +)"; + EXPECT_EQ(emptyStr, emptyExpected); + + OptIvar result; + json5::FromString(emptyStr, result); + EXPECT_FALSE(result.val.has_value()); + + OptIvar set = {42}; + std::string setStr = json5::ToString(set); + std::string setExpected = R"({ + val: 42 +} +)"; + EXPECT_EQ(setStr, setExpected); + + json5::FromString(setStr, result); + EXPECT_EQ(result.val, 42); + } + + { + DocumentContainer container; + std::string jsonStr = R"({ + nesting: { + arr: [ + 5, + "a", + null, + true, + false, + [ + "b", + "c" + ], + NaN + ], + obj: { + d: "e", + f: null + }, + int: 42, + double: 42.4242, + null: null, + boolean: true + }, + array: [ + 9, + false + ], + null: null, + boolean: true, + number: 4242, + str: "My Wonderful string", + count: 45 +} +)"; + json5::Error err = json5::FromString(jsonStr, container); + EXPECT_FALSE(err); + + std::string roundTrip = json5::ToString(container); + EXPECT_EQ(roundTrip, jsonStr); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +struct Stopwatch +{ + const char* name = ""; + std::chrono::nanoseconds start = std::chrono::high_resolution_clock::now().time_since_epoch(); + + ~Stopwatch() + { + auto duration = std::chrono::high_resolution_clock::now().time_since_epoch() - start; + std::cout << name << ": " << duration.count() / 1000000 << " ms" << std::endl; + } +}; + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, DISABLED_Performance) +/// Performance test +{ + fs::path path = "twitter.json"; + std::ifstream ifs(path.string()); + std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + + Stopwatch sw {"Parse twitter.json 100x"}; + + for (int i = 0; i < 100; ++i) + { + json5::Document doc; + if (auto err = json5::FromString(str, doc)) + break; + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, DISABLED_PerformanceOfIndependentValue) +/// Performance test +{ + fs::path path = "twitter.json"; + std::ifstream ifs(path.string()); + std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + + Stopwatch sw {"Parse twitter.json 100x"}; + + for (int i = 0; i < 100; ++i) + { + json5::IndependentValue value; + if (auto err = json5::FromString(str, value)) + break; + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, Independent) +{ + json5::IndependentValue value; + std::string json = R"( + { + "bool": false, + "num": 435.243, + "str": "a string", + "arr": ["str", 8, false], + "obj": { + "a": "value" + } + } + )"; + json5::Error error = json5::FromString(json, value); + EXPECT_EQ(error.type, json5::Error::None); + + json5::IndependentValue expected = {json5::IndependentValue::Map { + {"bool", {false}}, + {"num", {435.243}}, + {"str", {"a string"}}, + {"arr", + {json5::IndependentValue::Array { + {"str"s}, + {8.0}, + {false}, + }}}, + {"obj", + {json5::IndependentValue::Map { + {"a", {"value"}}, + }}}, + }}; + + EXPECT_EQ(value, expected); + + std::string str = json5::ToString(value, JSONCompatWriteParams); + EXPECT_EQ(str, R"({"arr":["str",8,false],"bool":false,"num":435.243,"obj":{"a":"value"},"str":"a string"})"); +} + +// Let's have a 3D vector struct: +struct Vec3 +{ + float x, y, z; +}; + +// Let's have a triangle struct with 'vec3' members +struct Triangle +{ + Vec3 a, b, c; +}; + +// Let's have an object of different types (not recommended) +struct TupleObj +{ + float num; + std::string str; + std::array arr; + bool boolean; +}; + +namespace json5::detail +{ + // Read Vec3 from JSON array + template <> + class Reflector : public TupleReflector + { + public: + explicit Reflector(Vec3& vec) + : TupleReflector(vec.x, vec.y, vec.z) + {} + }; + + // Write Vec3 to JSON array + template <> + class ReflectionWriter : public TupleReflectionWriter + { + public: + static inline void Write(Writer& w, const Vec3& in) { TupleReflectionWriter::Write(w, in.x, in.y, in.z); } + }; + + // Read Triangle from JSON array + template <> + class Reflector : public TupleReflector + { + public: + explicit Reflector(Triangle& tri) + : TupleReflector(tri.a, tri.b, tri.c) + {} + }; + + // Write Triangle to JSON array + template <> + class ReflectionWriter : public TupleReflectionWriter + { + public: + static inline void Write(Writer& w, const Triangle& in) { TupleReflectionWriter::Write(w, in.a, in.b, in.c); } + }; + + template <> + class Reflector : public TupleReflector, bool> + { + public: + explicit Reflector(TupleObj& tup) + : TupleReflector(tup.num, tup.str, tup.arr, tup.boolean) + {} + }; + + template <> + class ReflectionWriter : public TupleReflectionWriter, bool> + { + public: + static inline void Write(Writer& w, const TupleObj& in) { TupleReflectionWriter::Write(w, in.num, in.str, in.arr, in.boolean); } + }; + +} // namespace json5::detail + +TEST(Json5, Tuple) +{ + { + Vec3 vec; + json5::Error err = json5::FromString("[2,3]", vec); + EXPECT_EQ(err.type, json5::Error::WrongArraySize); + + err = json5::FromString("[2,3,4,5]", vec); + EXPECT_EQ(err.type, json5::Error::WrongArraySize); + } + + { + Vec3 vec; + std::string jsonStr = R"([ + 3, + 4, + 5 +] +)"; + json5::Error err = json5::FromString(jsonStr, vec); + EXPECT_FALSE(err); + + std::string roundTrip = json5::ToString(vec); + EXPECT_EQ(roundTrip, jsonStr); + } + + { + Triangle tri; + std::string jsonStr = R"([ + [ + 3, + 4, + 5 + ], + [ + 6, + 7, + 8 + ], + [ + 9, + 10, + 11 + ] +] +)"; + json5::Error err = json5::FromString(jsonStr, tri); + EXPECT_FALSE(err); + + std::string roundTrip = json5::ToString(tri); + EXPECT_EQ(roundTrip, jsonStr); + } + + { + TupleObj obj; + std::string jsonStr = R"([ + 42.42, + "Bar", + [ + 42 + ], + true +] +)"; + json5::Error err = json5::FromString(jsonStr, obj); + EXPECT_FALSE(err); + + std::string roundTrip = json5::ToString(obj); + EXPECT_EQ(roundTrip, jsonStr); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, NullsInString) +{ + std::string expected = "\"This is a str with a \\u0000 in it\"\n"; + std::string decoded; + json5::Error err = json5::FromString(expected, decoded); + EXPECT_FALSE(err); + EXPECT_EQ(decoded, "This is a str with a \0 in it"sv); + + std::string roundTrip = json5::ToString(decoded); + EXPECT_EQ(roundTrip, expected); +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, FormatterRestore) +{ + std::string expected = R"'({"displayTitle":"Fran\u00e7ais (AAC Stereo)","extendedDisplayTitle":"Fran\u00e7ais (AAC Stereo)","samplingRate":48000})'"; + json5::Document doc; + json5::Error err = json5::FromString(expected, doc); + EXPECT_FALSE(err); + + std::string roundTrip = json5::ToString(doc, JSONCompatWriteParams); + EXPECT_EQ(roundTrip, expected); +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, StringLength) +{ + std::string expected = R"'("Fran\u00e7ais")'"; + std::string value; + json5::Error err = json5::FromString(expected, value); + EXPECT_FALSE(err); + EXPECT_EQ(value, "Français"); + + std::string roundTrip = json5::ToString(value, JSONCompatWriteParams); + EXPECT_EQ(roundTrip, expected); +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, Multimap) +{ + std::multimap original = { + {"a", "first"}, + {"a", "second"}, + {"b", "la"}, + {"b", "lade"}, + {"b", "ladeda"}, + {"c", "single"}}; + + std::string json = json5::ToString(original, JSONCompatWriteParams); + EXPECT_EQ(json, R"({"a":["first","second"],"b":["la","lade","ladeda"],"c":["single"]})"); + + std::multimap roundTrip; + json5::Error error = json5::FromString(json, roundTrip); + EXPECT_EQ(error.type, json5::Error::None); + + EXPECT_EQ(roundTrip, original); +} + +///////////////////////////////////////////////////////////////////////////////////////// +struct NameContainer +{ + std::string longName; + bool isPublic = false; + std::string shortName; + + JSON5_MEMBERS(longName, isPublic, shortName); +}; + +namespace json5::detail +{ + template <> + struct NameSubstitution + { + static constexpr std::array Substitutions = { + { + {"longName", "long"}, + {"isPublic", "public"}, + {"shortName", "short"}, + }, + }; + }; +} // namespace json5::detail + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, ReadingReservedName) +{ + std::string expected = R"({"long":"William Q. Smith","public":true,"short":"Bill"})"; + NameContainer bill; + json5::Error error = json5::FromString(expected, bill); + EXPECT_EQ(error.type, json5::Error::None); + + EXPECT_EQ(bill.isPublic, true); + EXPECT_EQ(bill.longName, "William Q. Smith"); + EXPECT_EQ(bill.shortName, "Bill"); + + std::string roundTrip = json5::ToString(bill, JSONCompatWriteParams); + EXPECT_EQ(roundTrip, expected); +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, Variant) +{ + using IdType = std::variant; + struct SomethingWithId + { + IdType id; + int count; + + JSON5_MEMBERS(id, count); + }; + + { + std::string expected = R"([{"id":5,"count":6},{"id":"7","count":8}])"; + std::vector somethings; + json5::Error error = json5::FromString(expected, somethings); + EXPECT_EQ(error.type, json5::Error::None); + + ASSERT_EQ(somethings.size(), 2); + EXPECT_EQ(somethings[0].id, IdType(5)); + EXPECT_EQ(somethings[0].count, 6); + EXPECT_EQ(somethings[1].id, IdType("7")); + EXPECT_EQ(somethings[1].count, 8); + + std::string roundTrip = json5::ToString(somethings, JSONCompatWriteParams); + EXPECT_EQ(roundTrip, expected); + } + + { + std::vector somethings; + std::string invalid = R"([{"id":[]}])"; + json5::Error error = json5::FromString(invalid, somethings); + EXPECT_EQ(error.type, json5::Error::NumberExpected); + } + + { + std::vector somethings; + std::string invalid = R"([{"id":true}])"; + json5::Error error = json5::FromString(invalid, somethings); + EXPECT_EQ(error.type, json5::Error::NumberExpected); + } + + { + std::vector somethings; + std::string invalid = R"([{"id":{}}}])"; + json5::Error error = json5::FromString(invalid, somethings); + EXPECT_EQ(error.type, json5::Error::NumberExpected); + } + + { + std::vector somethings; + std::string invalid = R"([{"id":null}}])"; + json5::Error error = json5::FromString(invalid, somethings); + EXPECT_EQ(error.type, json5::Error::NumberExpected); + } + + using Nested = std::variant; + struct SomethingWithNested + { + Nested id; + JSON5_MEMBERS(id); + }; + + { + std::string expected = R"([{"id":5},{"id":"7"},{"id":null}])"; + std::vector somethings; + json5::Error error = json5::FromString(expected, somethings); + EXPECT_EQ(error.type, json5::Error::None); + + ASSERT_EQ(somethings.size(), 3); + EXPECT_EQ(somethings[0].id, Nested(5)); + EXPECT_EQ(somethings[1].id, Nested("7")); + EXPECT_EQ(somethings[2].id, Nested()); + + std::string roundTrip = json5::ToString(somethings, JSONCompatWriteParams); + EXPECT_EQ(roundTrip, expected); + } + + struct SomethingWithOptNested + { + std::optional id; + JSON5_MEMBERS(id); + }; + + { + std::string expected = R"([{"id":5},{"id":"7"},{"id":null},{}])"; + std::vector somethings; + json5::Error error = json5::FromString(expected, somethings); + EXPECT_EQ(error.type, json5::Error::None); + + ASSERT_EQ(somethings.size(), 4); + EXPECT_EQ(somethings[0].id, Nested(5)); + EXPECT_EQ(somethings[1].id, Nested("7")); + EXPECT_EQ(somethings[2].id, Nested()); + EXPECT_FALSE(somethings[3].id.has_value()); + + std::string roundTrip = json5::ToString(somethings, JSONCompatWriteParams); + EXPECT_EQ(roundTrip, expected); + } +} + +///////////////////////////////////////////////////////////////////////////////////////// +TEST(Json5, SharedPtr) +{ + class SomeObject + { + public: + std::optional id; + std::optional identifier; + + JSON5_MEMBERS(id, identifier); + }; + DEFINE_SHARED(SomeObject); + + struct SomeVectorOfSharedPtr + { + int mainId; + vector SomeObjectPointer; // NOLINT(readability-identifier-naming) + + JSON5_MEMBERS(mainId, SomeObjectPointer); + }; + + std::string expected = R"([{"mainId":5,"SomeObjectPointer":[{"id":1,"identifier":"one"},{"id":2,"identifier":"two"}]}])"; + std::vector somethingVector; + json5::Error error = json5::FromString(expected, somethingVector); + EXPECT_EQ(error.type, json5::Error::None); + + ASSERT_EQ(somethingVector.size(), 1); + EXPECT_EQ(somethingVector[0].mainId, 5); + + ASSERT_EQ(somethingVector[0].SomeObjectPointer.size(), 2); + ASSERT_TRUE(somethingVector[0].SomeObjectPointer[0]->id.has_value()); + ASSERT_TRUE(somethingVector[0].SomeObjectPointer[0]->identifier.has_value()); + EXPECT_EQ(somethingVector[0].SomeObjectPointer[0]->id, 1); + EXPECT_EQ(somethingVector[0].SomeObjectPointer[0]->identifier, "one"); + ASSERT_TRUE(somethingVector[0].SomeObjectPointer[1]->id.has_value()); + ASSERT_TRUE(somethingVector[0].SomeObjectPointer[1]->identifier.has_value()); + EXPECT_EQ(somethingVector[0].SomeObjectPointer[1]->id, 2); + EXPECT_EQ(somethingVector[0].SomeObjectPointer[1]->identifier, "two"); + + std::string roundTrip = json5::ToString(somethingVector, JSONCompatWriteParams); + EXPECT_EQ(roundTrip, expected); + + struct SomeSharedPtr + { + int mainId; + SomeObjectPtr SomeObjectPointer; // NOLINT(readability-identifier-naming) + + JSON5_MEMBERS(mainId, SomeObjectPointer); + }; + + // Shared pointer object (not a vector) + expected = R"([{"mainId":5,"SomeObjectPointer":{"id":1,"identifier":"one"}}])"; + std::vector something; + error = json5::FromString(expected, something); + EXPECT_EQ(error.type, json5::Error::None); + + ASSERT_EQ(something.size(), 1); + EXPECT_EQ(something[0].mainId, 5); + ASSERT_TRUE(something[0].SomeObjectPointer->id.has_value()); + ASSERT_TRUE(something[0].SomeObjectPointer->identifier.has_value()); + EXPECT_EQ(something[0].SomeObjectPointer->id, 1); + EXPECT_EQ(something[0].SomeObjectPointer->identifier, "one"); + + roundTrip = json5::ToString(something, JSONCompatWriteParams); + EXPECT_EQ(roundTrip, expected); + + // Uninitialised pointer object. SomeObjectPtr should be a nullptr. + expected = R"([{"mainId":5}])"; + error = json5::FromString(expected, something); + EXPECT_EQ(error.type, json5::Error::None); + + ASSERT_EQ(something.size(), 1); + EXPECT_EQ(something[0].mainId, 5); + EXPECT_FALSE(something[0].SomeObjectPointer); + + roundTrip = json5::ToString(something, JSONCompatWriteParams); + EXPECT_EQ(roundTrip, expected); +} diff --git a/test/test.cpp b/test/test.cpp deleted file mode 100644 index 8fc683c..0000000 --- a/test/test.cpp +++ /dev/null @@ -1,196 +0,0 @@ -#include -#include -#include -#include - -#include -#include -#include -#include - -//--------------------------------------------------------------------------------------------------------------------- -struct Stopwatch -{ - const char *name = ""; - std::chrono::nanoseconds start = std::chrono::high_resolution_clock::now().time_since_epoch(); - - ~Stopwatch() - { - auto duration = std::chrono::high_resolution_clock::now().time_since_epoch() - start; - std::cout << name << ": " << duration.count() / 1000000 << " ms" << std::endl; - } -}; - -//--------------------------------------------------------------------------------------------------------------------- -bool PrintError( const json5::error &err ) -{ - if ( err ) - { - std::cout << json5::to_string( err ) << std::endl; - return true; - } - - return false; -} - -enum class MyEnum -{ - Zero, - First, - Second, - Third -}; - -JSON5_ENUM( MyEnum, Zero, First, Second, Third ) - -struct BarBase -{ - std::string name; -}; - -JSON5_CLASS( BarBase, name ) - -struct Bar : BarBase -{ - int age = 0; -}; - -JSON5_CLASS_INHERIT( Bar, BarBase, age ) - -//--------------------------------------------------------------------------------------------------------------------- -int main( int argc, char *argv[] ) -{ - /// Build - { - json5::document doc; - json5::builder b( doc ); - - b.push_object(); - { - b["x"] = b.new_string( "Hello!" ); - b["y"] = 123.0; - b["z"] = true; - - b.push_array(); - { - b += b.new_string( "a" ); - b += b.new_string( "b" ); - b += b.new_string( "c" ); - } - b["arr"] = b.pop(); - } - b.pop(); - - std::cout << json5::to_string( doc ); - } - - /// Load from file - { - json5::document doc; - PrintError( json5::from_file( "short_example.json5", doc ) ); - json5::to_stream( std::cout, doc ); - } - - /// File load/save test - { - json5::document doc1; - json5::document doc2; - { - Stopwatch sw{ "Load twitter.json (doc1)" }; - PrintError( json5::from_file( "twitter.json", doc1 ) ); - } - - { - json5::writer_params wp; - wp.compact = true; - - Stopwatch sw{ "Save twitter.json5" }; - json5::to_file( "twitter.json5", doc1, wp ); - } - - { - Stopwatch sw{ "Reload twitter.json5 (doc2)" }; - json5::from_file( "twitter.json5", doc2 ); - } - - { - Stopwatch sw{ "Compare doc1 == doc2" }; - if ( doc1 == doc2 ) - std::cout << "doc1 == doc2" << std::endl; - else - std::cout << "doc1 != doc2" << std::endl; - } - } - - /// Equality test - { - json5::document doc1; - json5::from_string( "{ x: 1, y: 2, z: 3 }", doc1 ); - - json5::document doc2; - json5::from_string( "{ z: 3, x: 1, y: 2 }", doc2 ); - - if ( doc1 == doc2 ) - std::cout << "doc1 == doc2" << std::endl; - else - std::cout << "doc1 != doc2" << std::endl; - } - - /// String line breaks - { - json5::document doc; - PrintError( json5::from_string( "{ text: 'Hello\\\n, world!' }", doc ) ); - json5::to_stream( std::cout, doc ); - } - - /// Reflection test - { - struct Foo - { - int x = 123; - float y = 456.0f; - bool z = true; - std::string text = "Hello, world!"; - std::vector numbers = { 1, 2, 3, 4, 5 }; - std::map barMap = { { "x", { "a", 1 } }, { "y", { "b", 2 } }, { "z", { "c", 3 } } }; - - std::array position = { 10.0f, 20.0f, 30.0f }; - - Bar bar = { "Somebody Unknown", 500 }; - MyEnum e = MyEnum::Second; - - JSON5_MEMBERS( x, y, z, text, numbers, barMap, position, bar, e ) - //bool operator==( const Foo &o ) const noexcept { return make_tuple() == o.make_tuple(); } - }; - - Foo foo1; - json5::to_file( "Foo.json5", foo1 ); - - Foo foo2; - json5::from_file( "Foo.json5", foo2 ); - - /* - if ( foo1 == foo2 ) - std::cout << "foo1 == foo2" << std::endl; - else - std::cout << "foo1 != foo2" << std::endl; - */ - } - - /// Performance test - { - std::ifstream ifs("twitter.json"); - std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); - - Stopwatch sw{ "Parse twitter.json 100x" }; - - for (int i = 0; i < 100; ++i) - { - json5::document doc; - if (auto err = json5::from_string(str, doc)) - break; - } - } - - return 0; -} diff --git a/test/twitter.json5 b/test/twitter.json5 deleted file mode 100644 index fdd57ae..0000000 --- a/test/twitter.json5 +++ /dev/null @@ -1,15482 +0,0 @@ -{ - statuses: [ - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:15 +0000 2014", - id: 505874924095815680, - id_str: "505874924095815681", - text: "@aym0566x \n\n名前:前田あゆみ\n第一印象:なんか怖っ!\n今の印象:とりあえずキモい。噛み合わない\n好きなところ:ぶすでキモいとこ😋✨✨\n思い出:んーーー、ありすぎ😊❤️\nLINE交換できる?:あぁ……ごめん✋\nトプ画をみて:照れますがな😘✨\n一言:お前は一生もんのダチ💖", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 866260188, - in_reply_to_user_id_str: "866260188", - in_reply_to_screen_name: "aym0566x", - user: { - id: 1186275104, - id_str: "1186275104", - name: "AYUMI", - screen_name: "ayuu0123", - location: "", - description: "元野球部マネージャー❤︎…最高の夏をありがとう…❤︎", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 262, - friends_count: 252, - listed_count: 0, - created_at: "Sat Feb 16 13:40:25 +0000 2013", - favourites_count: 235, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 1769, - lang: "en", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/497760886795153410/LDjAwR_y_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/497760886795153410/LDjAwR_y_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1186275104/1409318784", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "aym0566x", - name: "前田あゆみ", - id: 866260188, - id_str: "866260188", - indices: [ - 0, - 9 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:14 +0000 2014", - id: 505874922023837696, - id_str: "505874922023837696", - text: "RT @KATANA77: えっそれは・・・(一同) http://t.co/PkCJAcSuYK", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 903487807, - id_str: "903487807", - name: "RT&ファボ魔のむっつんさっm", - screen_name: "yuttari1998", - location: "関西 ↓詳しいプロ↓", - description: "無言フォローはあまり好みません ゲームと動画が好きですシモ野郎ですがよろしく…最近はMGSとブレイブルー、音ゲーをプレイしてます", - url: "http://t.co/Yg9e1Fl8wd", - entities: { - url: { - urls: [ - { - url: "http://t.co/Yg9e1Fl8wd", - expanded_url: "http://twpf.jp/yuttari1998", - display_url: "twpf.jp/yuttari1998", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 95, - friends_count: 158, - listed_count: 1, - created_at: "Thu Oct 25 08:27:13 +0000 2012", - favourites_count: 3652, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 10276, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/500268849275494400/AoXHZ7Ij_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/500268849275494400/AoXHZ7Ij_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/903487807/1409062272", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sat Aug 30 23:49:35 +0000 2014", - id: 505864943636197376, - id_str: "505864943636197376", - text: "えっそれは・・・(一同) http://t.co/PkCJAcSuYK", - source: "Twitter Web Client", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 77915997, - id_str: "77915997", - name: "(有)刀", - screen_name: "KATANA77", - location: "", - description: "プリキュア好きのサラリーマンです。好きなプリキュアシリーズはハートキャッチ、最愛のキャラクターは月影ゆりさんです。 http://t.co/QMLJeFmfMTご質問、お問い合わせはこちら http://t.co/LU8T7vmU3h", - url: 0, - entities: { - description: { - urls: [ - { - url: "http://t.co/QMLJeFmfMT", - expanded_url: "http://www.pixiv.net/member.php?id=4776", - display_url: "pixiv.net/member.php?id=…", - indices: [ - 58, - 80 - ] - }, - { - url: "http://t.co/LU8T7vmU3h", - expanded_url: "http://ask.fm/KATANA77", - display_url: "ask.fm/KATANA77", - indices: [ - 95, - 117 - ] - } - ] - } - }, - protected: false, - followers_count: 1095, - friends_count: 740, - listed_count: 50, - created_at: "Mon Sep 28 03:41:27 +0000 2009", - favourites_count: 3741, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: true, - verified: false, - statuses_count: 19059, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/808597451/45b82f887085d32bd4b87dfc348fe22a.png", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/808597451/45b82f887085d32bd4b87dfc348fe22a.png", - profile_background_tile: true, - profile_image_url: "http://pbs.twimg.com/profile_images/480210114964504577/MjVIEMS4_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/480210114964504577/MjVIEMS4_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/77915997/1404661392", - profile_link_color: "0084B4", - profile_sidebar_border_color: "FFFFFF", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 82, - favorite_count: 42, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [], - media: [ - { - id: 505864942575034368, - id_str: "505864942575034369", - indices: [ - 13, - 35 - ], - media_url: "http://pbs.twimg.com/media/BwUxfC6CIAEr-Ye.jpg", - media_url_https: "https://pbs.twimg.com/media/BwUxfC6CIAEr-Ye.jpg", - url: "http://t.co/PkCJAcSuYK", - display_url: "pic.twitter.com/PkCJAcSuYK", - expanded_url: "http://twitter.com/KATANA77/status/505864943636197376/photo/1", - type: "photo", - sizes: { - medium: { - w: 600, - h: 338, - resize: "fit" - }, - small: { - w: 340, - h: 192, - resize: "fit" - }, - thumb: { - w: 150, - h: 150, - resize: "crop" - }, - large: { - w: 765, - h: 432, - resize: "fit" - } - } - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - retweet_count: 82, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "KATANA77", - name: "(有)刀", - id: 77915997, - id_str: "77915997", - indices: [ - 3, - 12 - ] - } - ], - media: [ - { - id: 505864942575034368, - id_str: "505864942575034369", - indices: [ - 27, - 49 - ], - media_url: "http://pbs.twimg.com/media/BwUxfC6CIAEr-Ye.jpg", - media_url_https: "https://pbs.twimg.com/media/BwUxfC6CIAEr-Ye.jpg", - url: "http://t.co/PkCJAcSuYK", - display_url: "pic.twitter.com/PkCJAcSuYK", - expanded_url: "http://twitter.com/KATANA77/status/505864943636197376/photo/1", - type: "photo", - sizes: { - medium: { - w: 600, - h: 338, - resize: "fit" - }, - small: { - w: 340, - h: 192, - resize: "fit" - }, - thumb: { - w: 150, - h: 150, - resize: "crop" - }, - large: { - w: 765, - h: 432, - resize: "fit" - } - }, - source_status_id: 505864943636197376, - source_status_id_str: "505864943636197376" - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:14 +0000 2014", - id: 505874920140591104, - id_str: "505874920140591104", - text: "@longhairxMIURA 朝一ライカス辛目だよw", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 505874728897085440, - in_reply_to_status_id_str: "505874728897085440", - in_reply_to_user_id: 114188950, - in_reply_to_user_id_str: "114188950", - in_reply_to_screen_name: "longhairxMIURA", - user: { - id: 114786346, - id_str: "114786346", - name: "PROTECT-T", - screen_name: "ttm_protect", - location: "静岡県長泉町", - description: "24 / XXX / @andprotector / @lifefocus0545 potato design works", - url: "http://t.co/5EclbQiRX4", - entities: { - url: { - urls: [ - { - url: "http://t.co/5EclbQiRX4", - expanded_url: "http://ap.furtherplatonix.net/index.html", - display_url: "ap.furtherplatonix.net/index.html", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 1387, - friends_count: 903, - listed_count: 25, - created_at: "Tue Feb 16 16:13:41 +0000 2010", - favourites_count: 492, - utc_offset: 32400, - time_zone: "Osaka", - geo_enabled: false, - verified: false, - statuses_count: 12679, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/481360383253295104/4B9Rcfys_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/481360383253295104/4B9Rcfys_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/114786346/1403600232", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "longhairxMIURA", - name: "miura desu", - id: 114188950, - id_str: "114188950", - indices: [ - 0, - 15 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:14 +0000 2014", - id: 505874919020699648, - id_str: "505874919020699648", - text: "RT @omo_kko: ラウワン脱出→友達が家に連んで帰ってって言うから友達ん家に乗せて帰る(1度も行ったことない田舎道)→友達おろして迷子→500メートルくらい続く変な一本道進む→墓地で行き止まりでUターン出来ずバックで500メートル元のところまで進まないといけない←今ここ", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 392585658, - id_str: "392585658", - name: "原稿", - screen_name: "chibu4267", - location: "キミの部屋の燃えるゴミ箱", - description: "RTしてTLに濁流を起こすからフォローしない方が良いよ 言ってることもつまらないし 詳細→http://t.co/ANSFlYXERJ 相方@1life_5106_hshd 葛西教徒その壱", - url: "http://t.co/JTFjV89eaN", - entities: { - url: { - urls: [ - { - url: "http://t.co/JTFjV89eaN", - expanded_url: "http://www.pixiv.net/member.php?id=1778417", - display_url: "pixiv.net/member.php?id=…", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [ - { - url: "http://t.co/ANSFlYXERJ", - expanded_url: "http://twpf.jp/chibu4267", - display_url: "twpf.jp/chibu4267", - indices: [ - 45, - 67 - ] - } - ] - } - }, - protected: false, - followers_count: 1324, - friends_count: 1165, - listed_count: 99, - created_at: "Mon Oct 17 08:23:46 +0000 2011", - favourites_count: 9542, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: true, - verified: false, - statuses_count: 369420, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/453106940822814720/PcJIZv43.png", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/453106940822814720/PcJIZv43.png", - profile_background_tile: true, - profile_image_url: "http://pbs.twimg.com/profile_images/505731759216943107/pzhnkMEg_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/505731759216943107/pzhnkMEg_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/392585658/1362383911", - profile_link_color: "5EB9FF", - profile_sidebar_border_color: "FFFFFF", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sat Aug 30 16:51:09 +0000 2014", - id: 505759640164892672, - id_str: "505759640164892673", - text: "ラウワン脱出→友達が家に連んで帰ってって言うから友達ん家に乗せて帰る(1度も行ったことない田舎道)→友達おろして迷子→500メートルくらい続く変な一本道進む→墓地で行き止まりでUターン出来ずバックで500メートル元のところまで進まないといけない←今ここ", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 309565423, - id_str: "309565423", - name: "おもっこ", - screen_name: "omo_kko", - location: "", - description: "ぱんすと", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 730, - friends_count: 200, - listed_count: 23, - created_at: "Thu Jun 02 09:15:51 +0000 2011", - favourites_count: 5441, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: true, - verified: false, - statuses_count: 30012, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/499126939378929664/GLWpIKTW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/499126939378929664/GLWpIKTW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/309565423/1409418370", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 67, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "omo_kko", - name: "おもっこ", - id: 309565423, - id_str: "309565423", - indices: [ - 3, - 11 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:13 +0000 2014", - id: 505874918198624256, - id_str: "505874918198624256", - text: "RT @thsc782_407: #LEDカツカツ選手権\n漢字一文字ぶんのスペースに「ハウステンボス」を収める狂気 http://t.co/vmrreDMziI", - source: "Twitter for Android", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 753161754, - id_str: "753161754", - name: "ねこねこみかん*", - screen_name: "nekonekomikan", - location: "ソーダ水のあふれるビンの中", - description: "猫×6、大学・高校・旦那各1と暮らしています。猫、子供、日常思った事をつぶやいています/今年の目標:読書、庭の手入れ、ランニング、手芸/猫*花*写真*詩*林ももこさん*鉄道など好きな方をフォローさせていただいています。よろしくお願いします♬", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 217, - friends_count: 258, - listed_count: 8, - created_at: "Sun Aug 12 14:00:47 +0000 2012", - favourites_count: 7650, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: false, - verified: false, - statuses_count: 20621, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/470627990271848448/m83uy6Vc_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/470627990271848448/m83uy6Vc_normal.jpeg", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Fri Feb 28 16:04:13 +0000 2014", - id: 439430848190742528, - id_str: "439430848190742528", - text: "#LEDカツカツ選手権\n漢字一文字ぶんのスペースに「ハウステンボス」を収める狂気 http://t.co/vmrreDMziI", - source: "Twitter Web Client", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 82900665, - id_str: "82900665", - name: "[90]青葉台 芦 (第二粟屋) 屋", - screen_name: "thsc782_407", - location: "かんましき", - description: "湯の街の元勃酩姦なんちゃら大 赤い犬の犬(外資系) 肥後で緑ナンバー屋さん勤め\nくだらないことしかつぶやかないし、いちいち訳のわからない記号を連呼するので相当邪魔になると思います。害はないと思います。のりものの画像とかたくさん上げます。さみしい。車輪のついたものならだいたい好き。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 587, - friends_count: 623, - listed_count: 30, - created_at: "Fri Oct 16 15:13:32 +0000 2009", - favourites_count: 1405, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: true, - verified: false, - statuses_count: 60427, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "352726", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/154137819/__813-1103.jpg", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/154137819/__813-1103.jpg", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/493760276676620289/32oLiTtT_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/493760276676620289/32oLiTtT_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/82900665/1398865798", - profile_link_color: "D02B55", - profile_sidebar_border_color: "829D5E", - profile_sidebar_fill_color: "99CC33", - profile_text_color: "3E4415", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 3291, - favorite_count: 1526, - entities: { - hashtags: [ - { - text: "LEDカツカツ選手権", - indices: [ - 0, - 11 - ] - } - ], - symbols: [], - urls: [], - user_mentions: [], - media: [ - { - id: 439430848194936832, - id_str: "439430848194936832", - indices: [ - 41, - 63 - ], - media_url: "http://pbs.twimg.com/media/BhksBzoCAAAJeDS.jpg", - media_url_https: "https://pbs.twimg.com/media/BhksBzoCAAAJeDS.jpg", - url: "http://t.co/vmrreDMziI", - display_url: "pic.twitter.com/vmrreDMziI", - expanded_url: "http://twitter.com/thsc782_407/status/439430848190742528/photo/1", - type: "photo", - sizes: { - medium: { - w: 600, - h: 450, - resize: "fit" - }, - large: { - w: 1024, - h: 768, - resize: "fit" - }, - thumb: { - w: 150, - h: 150, - resize: "crop" - }, - small: { - w: 340, - h: 255, - resize: "fit" - } - } - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - retweet_count: 3291, - favorite_count: 0, - entities: { - hashtags: [ - { - text: "LEDカツカツ選手権", - indices: [ - 17, - 28 - ] - } - ], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "thsc782_407", - name: "[90]青葉台 芦 (第二粟屋) 屋", - id: 82900665, - id_str: "82900665", - indices: [ - 3, - 15 - ] - } - ], - media: [ - { - id: 439430848194936832, - id_str: "439430848194936832", - indices: [ - 58, - 80 - ], - media_url: "http://pbs.twimg.com/media/BhksBzoCAAAJeDS.jpg", - media_url_https: "https://pbs.twimg.com/media/BhksBzoCAAAJeDS.jpg", - url: "http://t.co/vmrreDMziI", - display_url: "pic.twitter.com/vmrreDMziI", - expanded_url: "http://twitter.com/thsc782_407/status/439430848190742528/photo/1", - type: "photo", - sizes: { - medium: { - w: 600, - h: 450, - resize: "fit" - }, - large: { - w: 1024, - h: 768, - resize: "fit" - }, - thumb: { - w: 150, - h: 150, - resize: "crop" - }, - small: { - w: 340, - h: 255, - resize: "fit" - } - }, - source_status_id: 439430848190742528, - source_status_id_str: "439430848190742528" - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:13 +0000 2014", - id: 505874918039228416, - id_str: "505874918039228416", - text: "【金一地区太鼓台】川関と小山の見分けがつかない", - source: "twittbot.net", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2530194984, - id_str: "2530194984", - name: "川之江中高生あるある", - screen_name: "kw_aru", - location: "DMにてネタ提供待ってますよ", - description: "川之江中高生の川之江中高生による川之江中高生のためのあるあるアカウントです。タイムリーなネタはお気に入りにあります。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 113, - friends_count: 157, - listed_count: 0, - created_at: "Wed May 28 15:01:43 +0000 2014", - favourites_count: 30, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 4472, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/471668359314948097/XbIyXiZK_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/471668359314948097/XbIyXiZK_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2530194984/1401289473", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:13 +0000 2014", - id: 505874915338104832, - id_str: "505874915338104833", - text: "おはようございますん♪ SSDSのDVDが朝一で届いた〜(≧∇≦)", - source: "TweetList!", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 428179337, - id_str: "428179337", - name: "サラ", - screen_name: "sala_mgn", - location: "東京都", - description: "bot遊びと実況が主目的の趣味アカウント。成人済♀。時々TLお騒がせします。リフォ率低いですがF/Bご自由に。スパムはブロック![HOT]K[アニメ]タイバニ/K/薄桜鬼/トライガン/進撃[小説]冲方丁/森博嗣[漫画]内藤泰弘/高河ゆん[他]声優/演劇 ※@sano_bot1二代目管理人", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 104, - friends_count: 421, - listed_count: 2, - created_at: "Sun Dec 04 12:51:18 +0000 2011", - favourites_count: 3257, - utc_offset: -36000, - time_zone: "Hawaii", - geo_enabled: false, - verified: false, - statuses_count: 25303, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "1A1B1F", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/601682567/put73jtg48ytjylq00if.jpeg", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/601682567/put73jtg48ytjylq00if.jpeg", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/3350624721/755920942e4f512e6ba489df7eb1147e_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/3350624721/755920942e4f512e6ba489df7eb1147e_normal.jpeg", - profile_link_color: "2FC2EF", - profile_sidebar_border_color: "181A1E", - profile_sidebar_fill_color: "252429", - profile_text_color: "666666", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:13 +0000 2014", - id: 505874914897690624, - id_str: "505874914897690624", - text: "@ran_kirazuki そのようなお言葉を頂けるとは……!この雨太郎、誠心誠意を持って姉御の足の指の第一関節を崇め奉りとうございます", - source: "Twitter for Android", - truncated: false, - in_reply_to_status_id: 505874276692406272, - in_reply_to_status_id_str: "505874276692406272", - in_reply_to_user_id: 531544559, - in_reply_to_user_id_str: "531544559", - in_reply_to_screen_name: "ran_kirazuki", - user: { - id: 2364828518, - id_str: "2364828518", - name: "雨", - screen_name: "tear_dice", - location: "変態/日常/創作/室町/たまに版権", - description: "アイコンは兄さんから!", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 28, - friends_count: 28, - listed_count: 0, - created_at: "Fri Feb 28 00:28:40 +0000 2014", - favourites_count: 109, - utc_offset: 32400, - time_zone: "Seoul", - geo_enabled: false, - verified: false, - statuses_count: 193, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "000000", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/504434510675443713/lvW7ad5b.jpeg", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/504434510675443713/lvW7ad5b.jpeg", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/505170142284640256/rnW4XeEJ_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/505170142284640256/rnW4XeEJ_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2364828518/1409087198", - profile_link_color: "0D31BF", - profile_sidebar_border_color: "000000", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "ran_kirazuki", - name: "蘭ぴよの日常", - id: 531544559, - id_str: "531544559", - indices: [ - 0, - 13 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:13 +0000 2014", - id: 505874914591514624, - id_str: "505874914591514626", - text: "RT @AFmbsk: @samao21718 \n呼び方☞まおちゃん\n呼ばれ方☞あーちゃん\n第一印象☞平野から?!\n今の印象☞おとなっぽい!!\nLINE交換☞もってるん\\( ˆoˆ )/\nトプ画について☞楽しそうでいーな😳\n家族にするなら☞おねぇちゃん\n最後に一言☞全然会えない…", - source: "Twitter for Android", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2179759316, - id_str: "2179759316", - name: "まお", - screen_name: "samao21718", - location: "埼玉 UK留学してました✈", - description: "゚.*97line おさらに貢いでる系女子*.゜ DISH// ✯ 佐野悠斗 ✯ 読モ ✯ WEGO ✯ 嵐 I met @OTYOfficial in the London ;)", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 111, - friends_count: 121, - listed_count: 0, - created_at: "Thu Nov 07 09:47:41 +0000 2013", - favourites_count: 321, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 1777, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501535615351926784/c5AAh6Sz_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501535615351926784/c5AAh6Sz_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2179759316/1407640217", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sat Aug 30 14:59:49 +0000 2014", - id: 505731620456771584, - id_str: "505731620456771584", - text: "@samao21718 \n呼び方☞まおちゃん\n呼ばれ方☞あーちゃん\n第一印象☞平野から?!\n今の印象☞おとなっぽい!!\nLINE交換☞もってるん\\( ˆoˆ )/\nトプ画について☞楽しそうでいーな😳\n家族にするなら☞おねぇちゃん\n最後に一言☞全然会えないねー今度会えたらいいな!", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 2179759316, - in_reply_to_user_id_str: "2179759316", - in_reply_to_screen_name: "samao21718", - user: { - id: 1680668713, - id_str: "1680668713", - name: "★Shiiiii!☆", - screen_name: "AFmbsk", - location: "埼玉", - description: "2310*basketball#41*UVERworld*Pooh☪Bell +.。*弱さを知って強くなれ*゚", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 429, - friends_count: 434, - listed_count: 0, - created_at: "Sun Aug 18 12:45:00 +0000 2013", - favourites_count: 2488, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 6352, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/504643170886365185/JN_dlwUd_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/504643170886365185/JN_dlwUd_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1680668713/1408805886", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 1, - favorite_count: 1, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "samao21718", - name: "まお", - id: 2179759316, - id_str: "2179759316", - indices: [ - 0, - 11 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 1, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "AFmbsk", - name: "★Shiiiii!☆", - id: 1680668713, - id_str: "1680668713", - indices: [ - 3, - 10 - ] - }, - { - screen_name: "samao21718", - name: "まお", - id: 2179759316, - id_str: "2179759316", - indices: [ - 12, - 23 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:10 +0000 2014", - id: 505874905712189440, - id_str: "505874905712189440", - text: "一、常に身一つ簡素にして、美食を好んではならない", - source: "twittbot.net", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1330420010, - id_str: "1330420010", - name: "獨行道bot", - screen_name: "dokkodo_bot", - location: "", - description: "宮本武蔵の自誓書、「獨行道」に記された二十一箇条をランダムにつぶやくbotです。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 4, - friends_count: 5, - listed_count: 1, - created_at: "Sat Apr 06 01:19:55 +0000 2013", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 9639, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/3482551671/d9e749f7658b523bdd50b7584ed4ba6a_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/3482551671/d9e749f7658b523bdd50b7584ed4ba6a_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1330420010/1365212335", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:10 +0000 2014", - id: 505874903094939648, - id_str: "505874903094939648", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "モテモテ大作戦★男子編", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2714526565, - id_str: "2714526565", - name: "モテモテ大作戦★男子編", - screen_name: "mote_danshi1", - location: "", - description: "やっぱりモテモテ男子になりたい!自分を磨くヒントをみつけたい!応援してくれる人は RT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 664, - friends_count: 1835, - listed_count: 0, - created_at: "Thu Aug 07 12:59:59 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 597, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/497368689386086400/7hqdKMzG_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/497368689386086400/7hqdKMzG_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2714526565/1407416898", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:10 +0000 2014", - id: 505874902390276096, - id_str: "505874902390276096", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "心に響くアツい名言集", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2699261263, - id_str: "2699261263", - name: "心に響くアツい名言集", - screen_name: "kokoro_meigen11", - location: "", - description: "人生の格言は、人の心や人生を瞬時にに動かしてしまうことがある。\r\nそんな言葉の重みを味わおう。\r\n面白かったらRT & 相互フォローでみなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 183, - friends_count: 1126, - listed_count: 0, - created_at: "Fri Aug 01 22:00:00 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 749, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/495328654126112768/1rKnNuWK_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/495328654126112768/1rKnNuWK_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2699261263/1406930543", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:10 +0000 2014", - id: 505874902247677952, - id_str: "505874902247677954", - text: "RT @POTENZA_SUPERGT: ありがとうございます!“@8CBR8: @POTENZA_SUPERGT 13時半ごろ一雨きそうですが、無事全車決勝レース完走出来ること祈ってます! http://t.co/FzTyFnt9xH”", - source: "jigtwi", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1021030416, - id_str: "1021030416", - name: "narur", - screen_name: "narur2", - location: "晴れの国なのに何故か開幕戦では雨や雪や冰や霰が降る✨", - description: "F1.GP2.Superformula.SuperGT.F3...\nスーパーGTが大好き♡車が好き!新幹線も好き!飛行機も好き!こっそり別アカです(๑´ㅂ`๑)♡*.+゜", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 257, - friends_count: 237, - listed_count: 2, - created_at: "Wed Dec 19 01:14:41 +0000 2012", - favourites_count: 547, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 55417, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/462180217574789121/1Jf6m_2L.jpeg", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/462180217574789121/1Jf6m_2L.jpeg", - profile_background_tile: true, - profile_image_url: "http://pbs.twimg.com/profile_images/444312241395863552/FKl40ebQ_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/444312241395863552/FKl40ebQ_normal.jpeg", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:05:11 +0000 2014", - id: 505868866686169088, - id_str: "505868866686169089", - text: "ありがとうございます!“@8CBR8: @POTENZA_SUPERGT 13時半ごろ一雨きそうですが、無事全車決勝レース完走出来ること祈ってます! http://t.co/FzTyFnt9xH”", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 505868690588303360, - in_reply_to_status_id_str: "505868690588303360", - in_reply_to_user_id: 333344408, - in_reply_to_user_id_str: "333344408", - in_reply_to_screen_name: "8CBR8", - user: { - id: 359324738, - id_str: "359324738", - name: "POTENZA_SUPERGT", - screen_name: "POTENZA_SUPERGT", - location: "", - description: "ブリヂストンのスポーツタイヤ「POTENZA」のアカウントです。レースやタイヤの事などをつぶやきます。今シーズンも「チャンピオンタイヤの称号は譲らない」をキャッチコピーに、タイヤ供給チームを全力でサポートしていきますので、応援よろしくお願いします!なお、返信ができない場合もありますので、ご了承よろしくお願い致します。", - url: "http://t.co/LruVPk5x4K", - entities: { - url: { - urls: [ - { - url: "http://t.co/LruVPk5x4K", - expanded_url: "http://www.bridgestone.co.jp/sc/potenza/", - display_url: "bridgestone.co.jp/sc/potenza/", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 9612, - friends_count: 308, - listed_count: 373, - created_at: "Sun Aug 21 11:33:38 +0000 2011", - favourites_count: 26, - utc_offset: -36000, - time_zone: "Hawaii", - geo_enabled: true, - verified: false, - statuses_count: 10032, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "131516", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme14/bg.gif", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme14/bg.gif", - profile_background_tile: true, - profile_image_url: "http://pbs.twimg.com/profile_images/1507885396/TW_image_normal.jpg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/1507885396/TW_image_normal.jpg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/359324738/1402546267", - profile_link_color: "FF2424", - profile_sidebar_border_color: "EEEEEE", - profile_sidebar_fill_color: "EFEFEF", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 7, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "8CBR8", - name: "CBR Rider #17 KEIHIN", - id: 333344408, - id_str: "333344408", - indices: [ - 12, - 18 - ] - }, - { - screen_name: "POTENZA_SUPERGT", - name: "POTENZA_SUPERGT", - id: 359324738, - id_str: "359324738", - indices: [ - 20, - 36 - ] - } - ], - media: [ - { - id: 505868690252779520, - id_str: "505868690252779521", - indices: [ - 75, - 97 - ], - media_url: "http://pbs.twimg.com/media/BwU05MGCUAEY6Wu.jpg", - media_url_https: "https://pbs.twimg.com/media/BwU05MGCUAEY6Wu.jpg", - url: "http://t.co/FzTyFnt9xH", - display_url: "pic.twitter.com/FzTyFnt9xH", - expanded_url: "http://twitter.com/8CBR8/status/505868690588303360/photo/1", - type: "photo", - sizes: { - medium: { - w: 600, - h: 399, - resize: "fit" - }, - thumb: { - w: 150, - h: 150, - resize: "crop" - }, - large: { - w: 1024, - h: 682, - resize: "fit" - }, - small: { - w: 340, - h: 226, - resize: "fit" - } - }, - source_status_id: 505868690588303360, - source_status_id_str: "505868690588303360" - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - retweet_count: 7, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "POTENZA_SUPERGT", - name: "POTENZA_SUPERGT", - id: 359324738, - id_str: "359324738", - indices: [ - 3, - 19 - ] - }, - { - screen_name: "8CBR8", - name: "CBR Rider #17 KEIHIN", - id: 333344408, - id_str: "333344408", - indices: [ - 33, - 39 - ] - }, - { - screen_name: "POTENZA_SUPERGT", - name: "POTENZA_SUPERGT", - id: 359324738, - id_str: "359324738", - indices: [ - 41, - 57 - ] - } - ], - media: [ - { - id: 505868690252779520, - id_str: "505868690252779521", - indices: [ - 96, - 118 - ], - media_url: "http://pbs.twimg.com/media/BwU05MGCUAEY6Wu.jpg", - media_url_https: "https://pbs.twimg.com/media/BwU05MGCUAEY6Wu.jpg", - url: "http://t.co/FzTyFnt9xH", - display_url: "pic.twitter.com/FzTyFnt9xH", - expanded_url: "http://twitter.com/8CBR8/status/505868690588303360/photo/1", - type: "photo", - sizes: { - medium: { - w: 600, - h: 399, - resize: "fit" - }, - thumb: { - w: 150, - h: 150, - resize: "crop" - }, - large: { - w: 1024, - h: 682, - resize: "fit" - }, - small: { - w: 340, - h: 226, - resize: "fit" - } - }, - source_status_id: 505868690588303360, - source_status_id_str: "505868690588303360" - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:09 +0000 2014", - id: 505874901689851904, - id_str: "505874901689851904", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "ここだけの本音★男子編", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2762136439, - id_str: "2762136439", - name: "ここだけの本音★男子編", - screen_name: "danshi_honne1", - location: "", - description: "思ってるけど言えない!でもホントは言いたいこと、実はいっぱいあるんです! \r\nそんな男子の本音を、つぶやきます。 \r\nその気持わかるって人は RT & フォローお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 101, - friends_count: 985, - listed_count: 0, - created_at: "Sun Aug 24 11:11:30 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 209, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503500282840354816/CEv8UMay_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503500282840354816/CEv8UMay_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2762136439/1408878822", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:09 +0000 2014", - id: 505874900939046912, - id_str: "505874900939046912", - text: "RT @UARROW_Y: ようかい体操第一を踊る国見英 http://t.co/SXoYWH98as", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2454426158, - id_str: "2454426158", - name: "ぴかりん", - screen_name: "gncnToktTtksg", - location: "", - description: "銀魂/黒バス/進撃/ハイキュー/BLEACH/うたプリ/鈴木達央さん/神谷浩史さん 気軽にフォローしてください(^∇^)✨", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 1274, - friends_count: 1320, - listed_count: 17, - created_at: "Sun Apr 20 07:48:53 +0000 2014", - favourites_count: 2314, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 5868, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/457788684146716672/KCOy0S75_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/457788684146716672/KCOy0S75_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2454426158/1409371302", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:45 +0000 2014", - id: 505871779949051904, - id_str: "505871779949051904", - text: "ようかい体操第一を踊る国見英 http://t.co/SXoYWH98as", - source: "Twitter for Android", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1261662588, - id_str: "1261662588", - name: "ゆう矢", - screen_name: "UARROW_Y", - location: "つくり出そう国影の波 広げよう国影の輪", - description: "HQ!! 成人済腐女子。日常ツイート多いです。赤葦京治夢豚クソツイ含みます注意。フォローをお考えの際はプロフご一読お願い致します。FRBお気軽に", - url: "http://t.co/LFX2XOzb0l", - entities: { - url: { - urls: [ - { - url: "http://t.co/LFX2XOzb0l", - expanded_url: "http://twpf.jp/UARROW_Y", - display_url: "twpf.jp/UARROW_Y", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 265, - friends_count: 124, - listed_count: 12, - created_at: "Tue Mar 12 10:42:17 +0000 2013", - favourites_count: 6762, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: true, - verified: false, - statuses_count: 55946, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/502095104618663937/IzuPYx3E_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/502095104618663937/IzuPYx3E_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1261662588/1408618604", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 29, - favorite_count: 54, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/SXoYWH98as", - expanded_url: "http://twitter.com/UARROW_Y/status/505871779949051904/photo/1", - display_url: "pic.twitter.com/SXoYWH98as", - indices: [ - 15, - 37 - ] - } - ], - user_mentions: [] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - retweet_count: 29, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/SXoYWH98as", - expanded_url: "http://twitter.com/UARROW_Y/status/505871779949051904/photo/1", - display_url: "pic.twitter.com/SXoYWH98as", - indices: [ - 29, - 51 - ] - } - ], - user_mentions: [ - { - screen_name: "UARROW_Y", - name: "ゆう矢", - id: 1261662588, - id_str: "1261662588", - indices: [ - 3, - 12 - ] - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:09 +0000 2014", - id: 505874900561580032, - id_str: "505874900561580032", - text: "今日は一高と三桜(・θ・)\n光梨ちゃんに会えないかな〜", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1366375976, - id_str: "1366375976", - name: "ゆいの", - screen_name: "yuino1006", - location: "", - description: "さんおう 男バスマネ2ねん(^ω^)", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 270, - friends_count: 260, - listed_count: 0, - created_at: "Sat Apr 20 07:02:08 +0000 2013", - favourites_count: 1384, - utc_offset: 32400, - time_zone: "Irkutsk", - geo_enabled: false, - verified: false, - statuses_count: 5202, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/505354401448349696/nxVFEQQ4_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/505354401448349696/nxVFEQQ4_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1366375976/1399989379", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:09 +0000 2014", - id: 505874899324248064, - id_str: "505874899324248064", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "共感★絶対あるあるww", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2704420069, - id_str: "2704420069", - name: "共感★絶対あるあるww", - screen_name: "kyoukan_aru", - location: "", - description: "みんなにもわかってもらえる、あるあるを見つけたい。\r\n面白かったらRT & 相互フォローでみなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 857, - friends_count: 1873, - listed_count: 0, - created_at: "Sun Aug 03 15:50:40 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 682, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/495960812670836737/1LqkoyvU_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/495960812670836737/1LqkoyvU_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2704420069/1407081298", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:09 +0000 2014", - id: 505874898493796352, - id_str: "505874898493796352", - text: "RT @assam_house: 泉田新潟県知事は、東電の申請書提出を容認させられただけで、再稼働に必要な「同意」はまだ与えていません。今まで柏崎刈羽の再稼働を抑え続けてきた知事に、もう一踏ん張りをお願いする意見を送って下さい。全国の皆様、お願いします!\nhttp://t.co…", - source: "jigtwi for Android", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 960765968, - id_str: "960765968", - name: "さち", - screen_name: "sachitaka_dears", - location: "宮城県", - description: "動物関連のアカウントです。サブアカウント@sachi_dears (さち ❷) もあります。『心あるものは皆、愛し愛されるために生まれてきた。そして愛情を感じながら生を全うするべきなんだ』", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 3212, - friends_count: 3528, - listed_count: 91, - created_at: "Tue Nov 20 16:30:53 +0000 2012", - favourites_count: 3180, - utc_offset: 32400, - time_zone: "Irkutsk", - geo_enabled: false, - verified: false, - statuses_count: 146935, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/3659653229/5b698df67f5d105400e9077f5ea50e91_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/3659653229/5b698df67f5d105400e9077f5ea50e91_normal.png", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Tue Aug 19 11:00:53 +0000 2014", - id: 501685228427964416, - id_str: "501685228427964417", - text: "泉田新潟県知事は、東電の申請書提出を容認させられただけで、再稼働に必要な「同意」はまだ与えていません。今まで柏崎刈羽の再稼働を抑え続けてきた知事に、もう一踏ん張りをお願いする意見を送って下さい。全国の皆様、お願いします!\nhttp://t.co/9oH5cgpy1q", - source: "twittbot.net", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1104771276, - id_str: "1104771276", - name: "アッサム山中(殺処分ゼロに一票)", - screen_name: "assam_house", - location: "新潟県柏崎市", - description: "アッサム山中の趣味用アカ。当分の間、選挙啓発用としても使っていきます。このアカウントがアッサム山中本人のものである事は @assam_yamanaka のプロフでご確認下さい。\r\n公選法に係る表示\r\n庶民新党 #脱原発 http://t.co/96UqoCo0oU\r\nonestep.revival@gmail.com", - url: "http://t.co/AEOCATaNZc", - entities: { - url: { - urls: [ - { - url: "http://t.co/AEOCATaNZc", - expanded_url: "http://www.assam-house.net/", - display_url: "assam-house.net", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [ - { - url: "http://t.co/96UqoCo0oU", - expanded_url: "http://blog.assam-house.net/datsu-genpatsu/index.html", - display_url: "blog.assam-house.net/datsu-genpatsu…", - indices: [ - 110, - 132 - ] - } - ] - } - }, - protected: false, - followers_count: 2977, - friends_count: 3127, - listed_count: 64, - created_at: "Sat Jan 19 22:10:13 +0000 2013", - favourites_count: 343, - utc_offset: 32400, - time_zone: "Irkutsk", - geo_enabled: false, - verified: false, - statuses_count: 18021, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/378800000067217575/e0a85b440429ff50430a41200327dcb8_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/378800000067217575/e0a85b440429ff50430a41200327dcb8_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1104771276/1408948288", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 2, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/9oH5cgpy1q", - expanded_url: "http://www.pref.niigata.lg.jp/kouhou/info.html", - display_url: "pref.niigata.lg.jp/kouhou/info.ht…", - indices: [ - 111, - 133 - ] - } - ], - user_mentions: [] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - retweet_count: 2, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/9oH5cgpy1q", - expanded_url: "http://www.pref.niigata.lg.jp/kouhou/info.html", - display_url: "pref.niigata.lg.jp/kouhou/info.ht…", - indices: [ - 139, - 140 - ] - } - ], - user_mentions: [ - { - screen_name: "assam_house", - name: "アッサム山中(殺処分ゼロに一票)", - id: 1104771276, - id_str: "1104771276", - indices: [ - 3, - 15 - ] - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:09 +0000 2014", - id: 505874898468630528, - id_str: "505874898468630528", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "おしゃれ★ペアルック", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2708607692, - id_str: "2708607692", - name: "おしゃれ★ペアルック", - screen_name: "osyare_pea", - location: "", - description: "ラブラブ度がアップする、素敵なペアルックを見つけて紹介します♪ 気に入ったら RT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 129, - friends_count: 1934, - listed_count: 0, - created_at: "Tue Aug 05 07:09:31 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 641, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/496554257676382208/Zgg0bmNu_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/496554257676382208/Zgg0bmNu_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2708607692/1407222776", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:08 +0000 2014", - id: 505874897633951744, - id_str: "505874897633951745", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "LOVE ♥ ラブライブ", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745389137, - id_str: "2745389137", - name: "LOVE ♥ ラブライブ", - screen_name: "love_live55", - location: "", - description: "とにかく「ラブライブが好きで~す♥」 \r\nラブライブファンには、たまらない内容ばかり集めています♪ \r\n気に入ったら RT & 相互フォローお願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 251, - friends_count: 969, - listed_count: 0, - created_at: "Tue Aug 19 15:45:40 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 348, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501757482448850944/x2uPpqRx_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501757482448850944/x2uPpqRx_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745389137/1408463342", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:08 +0000 2014", - id: 505874896795086848, - id_str: "505874896795086848", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "恋する♡ドレスシリーズ", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2726346560, - id_str: "2726346560", - name: "恋する♡ドレスシリーズ", - screen_name: "koisurudoress", - location: "", - description: "どれもこれも、見ているだけで欲しくなっちゃう♪ \r\n特別な日に着る素敵なドレスを見つけたいです。 \r\n着てみたいと思ったら RT & フォローお願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 314, - friends_count: 1900, - listed_count: 0, - created_at: "Tue Aug 12 14:10:35 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 471, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/499199619465621504/fg7sVusT_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/499199619465621504/fg7sVusT_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2726346560/1407853688", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:08 +0000 2014", - id: 505874895964626944, - id_str: "505874895964626944", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "胸キュン♥動物図鑑", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2759192574, - id_str: "2759192574", - name: "胸キュン♥動物図鑑", - screen_name: "doubutuzukan", - location: "", - description: "ふとした表情に思わずキュンとしてしまう♪ \r\nそんな愛しの動物たちの写真を見つけます。 \r\n気に入ったら RT & フォローを、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 80, - friends_count: 959, - listed_count: 1, - created_at: "Sat Aug 23 15:47:36 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 219, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503211559552688128/Ej_bixna_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503211559552688128/Ej_bixna_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2759192574/1408809101", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:08 +0000 2014", - id: 505874895079608320, - id_str: "505874895079608320", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "ディズニー★パラダイス", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2719228561, - id_str: "2719228561", - name: "ディズニー★パラダイス", - screen_name: "disney_para", - location: "", - description: "ディズニーのかわいい画像、ニュース情報、あるあるなどをお届けします♪\r\nディズニーファンは RT & フォローもお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 331, - friends_count: 1867, - listed_count: 0, - created_at: "Sat Aug 09 12:01:32 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 540, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/498076922488696832/Ti2AEuOT_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/498076922488696832/Ti2AEuOT_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2719228561/1407585841", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:08 +0000 2014", - id: 505874894135898112, - id_str: "505874894135898112", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "生々しい風刺画", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2714772727, - id_str: "2714772727", - name: "生々しい風刺画", - screen_name: "nama_fuushi", - location: "", - description: "深い意味が込められた「生々しい風刺画」を見つけます。\r\n考えさせられたら RT & 相互フォローでみなさん、お願いします", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 298, - friends_count: 1902, - listed_count: 1, - created_at: "Thu Aug 07 15:04:45 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 595, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/497398363352875011/tS-5FPJB_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/497398363352875011/tS-5FPJB_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2714772727/1407424091", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:07 +0000 2014", - id: 505874893347377152, - id_str: "505874893347377152", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "嵐★大好きっ娘", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2721682579, - id_str: "2721682579", - name: "嵐★大好きっ娘", - screen_name: "arashi_suki1", - location: "", - description: "なんだかんだ言って、やっぱり嵐が好きなんです♪\r\nいろいろ集めたいので、嵐好きな人に見てほしいです。\r\n気に入ったら RT & 相互フォローお願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 794, - friends_count: 1913, - listed_count: 2, - created_at: "Sun Aug 10 13:43:56 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 504, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/498465364733198336/RO6wupdc_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/498465364733198336/RO6wupdc_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2721682579/1407678436", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:07 +0000 2014", - id: 505874893154426880, - id_str: "505874893154426881", - text: "RT @Takashi_Shiina: テレビで「成人男性のカロリー摂取量は1900kcal」とか言ってて、それはいままさに私がダイエットのために必死でキープしようとしている量で、「それが普通なら人はいつ天一やココイチに行って大盛りを食えばいいんだ!」と思った。", - source: "twicca", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 353516742, - id_str: "353516742", - name: "おしんこー@土曜西え41a", - screen_name: "oshin_koko", - location: "こたつ", - description: "ROMって楽しんでいる部分もあり無言フォロー多めですすみません…。ツイート数多め・あらぶり多めなのでフォロー非推奨です。最近は早兵・兵部受け中心ですがBLNLなんでも好きです。地雷少ないため雑多に呟きます。腐・R18・ネタバレ有るのでご注意。他好きなジャンルはプロフ参照願います。 主催→@chounou_antholo", - url: "http://t.co/mM1dG54NiO", - entities: { - url: { - urls: [ - { - url: "http://t.co/mM1dG54NiO", - expanded_url: "http://twpf.jp/oshin_koko", - display_url: "twpf.jp/oshin_koko", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 479, - friends_count: 510, - listed_count: 43, - created_at: "Fri Aug 12 05:53:13 +0000 2011", - favourites_count: 3059, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: false, - verified: false, - statuses_count: 104086, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "000000", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/799871497/01583a031f83a45eba881c8acde729ee.jpeg", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/799871497/01583a031f83a45eba881c8acde729ee.jpeg", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/484347196523835393/iHaYxm-2_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/484347196523835393/iHaYxm-2_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/353516742/1369039651", - profile_link_color: "FF96B0", - profile_sidebar_border_color: "FFFFFF", - profile_sidebar_fill_color: "95E8EC", - profile_text_color: "3C3940", - profile_use_background_image: false, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sat Aug 30 09:58:30 +0000 2014", - id: 505655792733650944, - id_str: "505655792733650944", - text: "テレビで「成人男性のカロリー摂取量は1900kcal」とか言ってて、それはいままさに私がダイエットのために必死でキープしようとしている量で、「それが普通なら人はいつ天一やココイチに行って大盛りを食えばいいんだ!」と思った。", - source: "Janetter", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 126573583, - id_str: "126573583", - name: "椎名高志", - screen_name: "Takashi_Shiina", - location: "BABEL(超能力支援研究局)", - description: "漫画家。週刊少年サンデーで『絶対可憐チルドレン』連載中。TVアニメ『THE UNLIMITED 兵部京介』公式サイト>http://t.co/jVqBoBEc", - url: "http://t.co/K3Oi83wM3w", - entities: { - url: { - urls: [ - { - url: "http://t.co/K3Oi83wM3w", - expanded_url: "http://cnanews.asablo.jp/blog/", - display_url: "cnanews.asablo.jp/blog/", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [ - { - url: "http://t.co/jVqBoBEc", - expanded_url: "http://unlimited-zc.jp/index.html", - display_url: "unlimited-zc.jp/index.html", - indices: [ - 59, - 79 - ] - } - ] - } - }, - protected: false, - followers_count: 110756, - friends_count: 61, - listed_count: 8159, - created_at: "Fri Mar 26 08:54:51 +0000 2010", - favourites_count: 25, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: false, - verified: false, - statuses_count: 27364, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "EDECE9", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme3/bg.gif", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme3/bg.gif", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/504597210772688896/Uvt4jgf5_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/504597210772688896/Uvt4jgf5_normal.png", - profile_link_color: "088253", - profile_sidebar_border_color: "D3D2CF", - profile_sidebar_fill_color: "E3E2DE", - profile_text_color: "634047", - profile_use_background_image: false, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 221, - favorite_count: 109, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 221, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "Takashi_Shiina", - name: "椎名高志", - id: 126573583, - id_str: "126573583", - indices: [ - 3, - 18 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:07 +0000 2014", - id: 505874892567244800, - id_str: "505874892567244801", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "下ネタ&笑変態雑学", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2762581922, - id_str: "2762581922", - name: "下ネタ&笑変態雑学", - screen_name: "shimo_hentai", - location: "", - description: "普通の人には思いつかない、ちょっと変態チックな 笑える下ネタ雑学をお届けします。 \r\nおもしろかったら RT & フォローお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 37, - friends_count: 990, - listed_count: 0, - created_at: "Sun Aug 24 14:13:20 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 212, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503545991950114816/K9yQbh1Q_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503545991950114816/K9yQbh1Q_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2762581922/1408889893", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:07 +0000 2014", - id: 505874891778703360, - id_str: "505874891778703360", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "超簡単★初心者英語", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2744544025, - id_str: "2744544025", - name: "超簡単★初心者英語", - screen_name: "kantaneigo1", - location: "", - description: "すぐに使えるフレーズや簡単な会話を紹介します。 \r\n少しづつ練習して、どんどん使ってみよう☆ \r\n使ってみたいと思ったら RT & フォローお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 147, - friends_count: 970, - listed_count: 1, - created_at: "Tue Aug 19 10:11:48 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 345, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501676136321929216/4MLpyHe3_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501676136321929216/4MLpyHe3_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2744544025/1408443928", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:07 +0000 2014", - id: 505874891032121344, - id_str: "505874891032121344", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "現代のハンドサイン", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2762816814, - id_str: "2762816814", - name: "現代のハンドサイン", - screen_name: "ima_handsign", - location: "", - description: "イザという時や、困った時に、必ず役に立つハンドサインのオンパレードです♪ \r\n使ってみたくなったら RT & フォローお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 95, - friends_count: 996, - listed_count: 0, - created_at: "Sun Aug 24 15:33:58 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 210, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503566188253687809/7wtdp1AC_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503566188253687809/7wtdp1AC_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2762816814/1408894540", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:07 +0000 2014", - id: 505874890247782400, - id_str: "505874890247782401", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "今日からアナタもイイ女♪", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2714167411, - id_str: "2714167411", - name: "今日からアナタもイイ女♪", - screen_name: "anata_iionna", - location: "", - description: "みんなが知りたい イイ女の秘密を見つけます♪ いいな~と思ってくれた人は RT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 390, - friends_count: 1425, - listed_count: 0, - created_at: "Thu Aug 07 09:27:59 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 609, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/497314455655436288/dz7P3-fy_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/497314455655436288/dz7P3-fy_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2714167411/1407404214", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:07 +0000 2014", - id: 505874890218434560, - id_str: "505874890218434560", - text: "@kohecyan3 \n名前:上野滉平\n呼び方:うえの\n呼ばれ方:ずるかわ\n第一印象:過剰な俺イケメンですアピール\n今の印象:バーバリーの時計\n好きなところ:あの自信さ、笑いが絶えない\n一言:大学受かったの?応援してる〜(*^^*)!\n\n#RTした人にやる\nちょっとやってみる笑", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 2591363659, - in_reply_to_user_id_str: "2591363659", - in_reply_to_screen_name: "kohecyan3", - user: { - id: 2613282517, - id_str: "2613282517", - name: "K", - screen_name: "kawazurukenna", - location: "", - description: "# I surprise even my self", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 113, - friends_count: 185, - listed_count: 0, - created_at: "Wed Jul 09 09:39:13 +0000 2014", - favourites_count: 157, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 242, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/502436858135973888/PcUU0lov_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/502436858135973888/PcUU0lov_normal.jpeg", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [ - { - text: "RTした人にやる", - indices: [ - 119, - 128 - ] - } - ], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "kohecyan3", - name: "上野滉平", - id: 2591363659, - id_str: "2591363659", - indices: [ - 0, - 10 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:07 +0000 2014", - id: 505874889392156672, - id_str: "505874889392156672", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "IQ★力だめし", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2709308887, - id_str: "2709308887", - name: "IQ★力だめし", - screen_name: "iq_tameshi", - location: "", - description: "解けると楽しい気分になれる問題を見つけて紹介します♪面白かったら RT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 443, - friends_count: 1851, - listed_count: 1, - created_at: "Tue Aug 05 13:14:30 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 664, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/496646485266558977/W_W--qV__normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/496646485266558977/W_W--qV__normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2709308887/1407244754", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:06 +0000 2014", - id: 505874888817532928, - id_str: "505874888817532928", - text: "第一三軍から2個師団が北へ移動中らしい     この調子では満州に陸軍兵力があふれかえる", - source: "如月克己", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1171299612, - id_str: "1171299612", - name: "如月 克己", - screen_name: "kisaragi_katumi", - location: "満州", - description: "GパングのA型K月克己中尉の非公式botです。 主に七巻と八巻が中心の台詞をつぶやきます。 4/18.台詞追加しました/現在試運転中/現在軽い挨拶だけTL反応。/追加したい台詞や何おかしい所がありましたらDMやリプライで/フォロー返しは手動です/", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 65, - friends_count: 63, - listed_count: 0, - created_at: "Tue Feb 12 08:21:38 +0000 2013", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 27219, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/3242847112/0ce536444c94cbec607229022d43a27a_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/3242847112/0ce536444c94cbec607229022d43a27a_normal.jpeg", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:06 +0000 2014", - id: 505874888616181760, - id_str: "505874888616181760", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "徳田有希★応援隊", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2766021865, - id_str: "2766021865", - name: "徳田有希★応援隊", - screen_name: "tokuda_ouen1", - location: "", - description: "女子中高生に大人気ww いやされるイラストを紹介します。 \r\nみんなで RTして応援しよう~♪ \r\n「非公式アカウントです」", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 123, - friends_count: 978, - listed_count: 0, - created_at: "Mon Aug 25 10:48:41 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 210, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503857235802333184/YS0sDN6q_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503857235802333184/YS0sDN6q_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2766021865/1408963998", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:06 +0000 2014", - id: 505874887802511360, - id_str: "505874887802511361", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "腐女子の☆部屋", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2744683982, - id_str: "2744683982", - name: "腐女子の☆部屋", - screen_name: "fujyoshinoheya", - location: "", - description: "腐女子にしかわからないネタや、あるあるを見つけていきます。 \r\n他には、BL~萌えキュン系まで、腐のための画像を集めています♪ \r\n同じ境遇の人には、わかってもらえると思うので、気軽に RT & フォローお願いします☆", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 241, - friends_count: 990, - listed_count: 0, - created_at: "Tue Aug 19 11:47:21 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 345, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501697365590306817/GLP_QH_b_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501697365590306817/GLP_QH_b_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2744683982/1408448984", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:06 +0000 2014", - id: 505874887009767424, - id_str: "505874887009767424", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "萌え芸術★ラテアート", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2763178045, - id_str: "2763178045", - name: "萌え芸術★ラテアート", - screen_name: "moe_rate", - location: "", - description: "ここまで来ると、もはや芸術!! 見てるだけで楽しい♪ \r\nそんなラテアートを、とことん探します。 \r\nスゴイと思ったら RT & フォローお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 187, - friends_count: 998, - listed_count: 0, - created_at: "Sun Aug 24 16:53:16 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 210, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503586151764992000/RC80it20_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503586151764992000/RC80it20_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2763178045/1408899447", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:06 +0000 2014", - id: 505874886225448960, - id_str: "505874886225448960", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "全部★ジャニーズ図鑑", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2724158970, - id_str: "2724158970", - name: "全部★ジャニーズ図鑑", - screen_name: "zenbu_johnnys", - location: "", - description: "ジャニーズのカッコイイ画像、おもしろエピソードなどを発信します。\r\n「非公式アカウントです」\r\nジャニーズ好きな人は、是非 RT & フォローお願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 738, - friends_count: 1838, - listed_count: 0, - created_at: "Mon Aug 11 15:50:08 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 556, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/498859581057945600/ncMKwdvC_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/498859581057945600/ncMKwdvC_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2724158970/1407772462", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:06 +0000 2014", - id: 505874885810200576, - id_str: "505874885810200576", - text: "RT @naopisu_: 呼び方:\n呼ばれ方:\n第一印象:\n今の印象:\n好きなところ:\n家族にするなら:\n最後に一言:\n#RTした人にやる\n\nお腹痛くて寝れないからやるww\nだれでもどうぞ〜😏🙌", - source: "Twitter for Android", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2347898072, - id_str: "2347898072", - name: "にたにた", - screen_name: "syo6660129", - location: "", - description: "", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 64, - friends_count: 70, - listed_count: 1, - created_at: "Mon Feb 17 04:29:46 +0000 2014", - favourites_count: 58, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 145, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/485603672118669314/73uh_xRS_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/485603672118669314/73uh_xRS_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2347898072/1396957619", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sat Aug 30 14:19:31 +0000 2014", - id: 505721480261300224, - id_str: "505721480261300224", - text: "呼び方:\n呼ばれ方:\n第一印象:\n今の印象:\n好きなところ:\n家族にするなら:\n最後に一言:\n#RTした人にやる\n\nお腹痛くて寝れないからやるww\nだれでもどうぞ〜😏🙌", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 856045488, - id_str: "856045488", - name: "なおぴす", - screen_name: "naopisu_", - location: "Fujino 65th ⇢ Sagaso 12A(LJK", - description: "\ もうすぐ18歳 “Only One”になる /", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 267, - friends_count: 259, - listed_count: 2, - created_at: "Mon Oct 01 08:36:23 +0000 2012", - favourites_count: 218, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 1790, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/496321592553525249/tuzX9ByR_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/496321592553525249/tuzX9ByR_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/856045488/1407118111", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 23, - favorite_count: 1, - entities: { - hashtags: [ - { - text: "RTした人にやる", - indices: [ - 47, - 56 - ] - } - ], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 23, - favorite_count: 0, - entities: { - hashtags: [ - { - text: "RTした人にやる", - indices: [ - 61, - 70 - ] - } - ], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "naopisu_", - name: "なおぴす", - id: 856045488, - id_str: "856045488", - indices: [ - 3, - 12 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:06 +0000 2014", - id: 505874885474656256, - id_str: "505874885474656256", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "爆笑★LINE あるある", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2709561589, - id_str: "2709561589", - name: "爆笑★LINE あるある", - screen_name: "line_aru1", - location: "", - description: "思わず笑ってしまうLINEでのやりとりや、あるあるを見つけたいです♪面白かったら RT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 496, - friends_count: 1875, - listed_count: 1, - created_at: "Tue Aug 05 15:01:30 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 687, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/496673793939492867/p1BN4YaW_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/496673793939492867/p1BN4YaW_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2709561589/1407251270", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:05 +0000 2014", - id: 505874884627410944, - id_str: "505874884627410944", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "全力★ミサワ的w発言", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2734455415, - id_str: "2734455415", - name: "全力★ミサワ的w発言!!", - screen_name: "misawahatugen", - location: "", - description: "ウザすぎて笑えるミサワ的名言や、おもしろミサワ画像を集めています。 \r\nミサワを知らない人でも、いきなりツボにハマっちゃう内容をお届けします。 \r\nウザいwと思ったら RT & 相互フォローお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 144, - friends_count: 1915, - listed_count: 1, - created_at: "Fri Aug 15 13:20:04 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 436, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/500271070834749444/HvengMe5_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/500271070834749444/HvengMe5_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2734455415/1408108944", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:05 +0000 2014", - id: 505874883809521664, - id_str: "505874883809521664", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "お宝ww有名人卒アル特集", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2708183557, - id_str: "2708183557", - name: "お宝ww有名人卒アル特集", - screen_name: "otakara_sotuaru", - location: "", - description: "みんな昔は若かったんですね。今からは想像もつかない、あの有名人を見つけます。\r\n面白かったら RT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 286, - friends_count: 1938, - listed_count: 0, - created_at: "Tue Aug 05 03:26:54 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 650, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/496499121276985344/hC8RoebP_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/496499121276985344/hC8RoebP_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2708183557/1407318758", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:05 +0000 2014", - id: 505874883322970112, - id_str: "505874883322970112", - text: "レッドクリフのキャラのこと女装ってくそわろたwww朝一で面白かった( ˘ω゜)笑", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1620730616, - id_str: "1620730616", - name: "ひーちゃん@橘芋健ぴ", - screen_name: "2nd_8hkr", - location: "北の大地.95年組 ☞ 9/28.10/2(5).12/28", - description: "THE SECOND/劇団EXILE/EXILE/二代目JSB ☞KENCHI.AKIRA.青柳翔.小森隼.石井杏奈☜ Big Love ♡ Respect ..... ✍ MATSU Origin✧ .た ち ば な '' い も '' け ん い ち ろ う さ んTEAM NACS 安田.戸次 Liebe !", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 109, - friends_count: 148, - listed_count: 0, - created_at: "Thu Jul 25 16:09:29 +0000 2013", - favourites_count: 783, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 9541, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/458760951060123648/Cocoxi-2_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/458760951060123648/Cocoxi-2_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1620730616/1408681982", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:05 +0000 2014", - id: 505874883067129856, - id_str: "505874883067129857", - text: "【状態良好】ペンタックス・デジタル一眼レフカメラ・K20D 入札数=38 現在価格=15000円 http://t.co/4WK1f6V2n6終了=2014年08月31日 20:47:53 #一眼レフ http://t.co/PcSaXzfHMW", - source: "YahooAuction Degicame", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2278053589, - id_str: "2278053589", - name: "AuctionCamera", - screen_name: "AuctionCamera", - location: "", - description: "Yahooオークションのデジカメカテゴリから商品を抽出するボットです。", - url: "https://t.co/3sB1NDnd0m", - entities: { - url: { - urls: [ - { - url: "https://t.co/3sB1NDnd0m", - expanded_url: "https://github.com/AKB428/YahooAuctionBot", - display_url: "github.com/AKB428/YahooAu…", - indices: [ - 0, - 23 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 5, - friends_count: 24, - listed_count: 0, - created_at: "Sun Jan 05 20:10:56 +0000 2014", - favourites_count: 1, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 199546, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/419927606146789376/vko-kd6Q_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/419927606146789376/vko-kd6Q_normal.jpeg", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [ - { - text: "一眼レフ", - indices: [ - 95, - 100 - ] - } - ], - symbols: [], - urls: [ - { - url: "http://t.co/4WK1f6V2n6", - expanded_url: "http://atq.ck.valuecommerce.com/servlet/atq/referral?sid=2219441&pid=877510753&vcptn=auct/p/RJH492.PLqoLQQx1Jy8U9LE-&vc_url=http://page8.auctions.yahoo.co.jp/jp/auction/h192024356", - display_url: "atq.ck.valuecommerce.com/servlet/atq/re…", - indices: [ - 49, - 71 - ] - } - ], - user_mentions: [], - media: [ - { - id: 505874882828046336, - id_str: "505874882828046336", - indices: [ - 101, - 123 - ], - media_url: "http://pbs.twimg.com/media/BwU6hpPCEAAxnpq.jpg", - media_url_https: "https://pbs.twimg.com/media/BwU6hpPCEAAxnpq.jpg", - url: "http://t.co/PcSaXzfHMW", - display_url: "pic.twitter.com/PcSaXzfHMW", - expanded_url: "http://twitter.com/AuctionCamera/status/505874883067129857/photo/1", - type: "photo", - sizes: { - large: { - w: 600, - h: 450, - resize: "fit" - }, - medium: { - w: 600, - h: 450, - resize: "fit" - }, - thumb: { - w: 150, - h: 150, - resize: "crop" - }, - small: { - w: 340, - h: 255, - resize: "fit" - } - } - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:05 +0000 2014", - id: 505874882995826688, - id_str: "505874882995826689", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "ヤバすぎる!!ギネス世界記録", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2762405780, - id_str: "2762405780", - name: "ヤバすぎる!!ギネス世界記録", - screen_name: "yabai_giness", - location: "", - description: "世の中には、まだまだ知られていないスゴイ記録があるんです! \r\nそんなギネス世界記録を見つけます☆ \r\nどんどん友達にも教えてあげてくださいねww \r\nヤバイと思ったら RT & フォローを、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 36, - friends_count: 985, - listed_count: 0, - created_at: "Sun Aug 24 13:17:03 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 210, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503531782919045121/NiIC25wL_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503531782919045121/NiIC25wL_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2762405780/1408886328", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:05 +0000 2014", - id: 505874882870009856, - id_str: "505874882870009856", - text: "すごく面白い夢見た。魔法科高校通ってて(別に一科二科の区別ない)クラスメイトにヨセアツメ面子や赤僕の拓也がいて、学校対抗合唱コンクールが開催されたり会場入りの際他校の妨害工作受けたり、拓也が連れてきてた実が人質に取られたりとにかくてんこ盛りだった楽しかった赤僕読みたい手元にない", - source: "Twitter for Android", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 597357105, - id_str: "597357105", - name: "ふじよし", - screen_name: "fuji_mark", - location: "多摩動物公園", - description: "成人腐女子", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 128, - friends_count: 126, - listed_count: 6, - created_at: "Sat Jun 02 10:06:05 +0000 2012", - favourites_count: 2842, - utc_offset: 32400, - time_zone: "Irkutsk", - geo_enabled: false, - verified: false, - statuses_count: 10517, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "0099B9", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme4/bg.gif", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme4/bg.gif", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503553738569560065/D_JW2dCJ_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503553738569560065/D_JW2dCJ_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/597357105/1408864355", - profile_link_color: "0099B9", - profile_sidebar_border_color: "5ED4DC", - profile_sidebar_fill_color: "95E8EC", - profile_text_color: "3C3940", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:05 +0000 2014", - id: 505874882228281344, - id_str: "505874882228281345", - text: "RT @oen_yakyu: ●継続試合(中京対崇徳)46回~ 9時~\n 〈ラジオ中継〉\n らじる★らじる→大阪放送局を選択→NHK-FM\n●決勝戦(三浦対中京or崇徳) 12時30分~\n 〈ラジオ中継〉\n らじる★らじる→大阪放送局を選択→NHK第一\n ※神奈川の方は普通のラ…", - source: "twicca", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 18477566, - id_str: "18477566", - name: "Natit(なち)@そうだ、トップ行こう", - screen_name: "natit_yso", - location: "福岡市の端っこ", - description: "ヤー・チャイカ。紫宝勢の末席くらいでQMAやってます。\r\n9/13(土)「九州杯」今年も宜しくお願いします!キーワードは「そうだ、トップ、行こう。」\r\nmore → http://t.co/ezuHyjF4Qy \r\n【旅の予定】9/20-22 関西 → 9/23-28 北海道ぐるり", - url: "http://t.co/ll2yu78DGR", - entities: { - url: { - urls: [ - { - url: "http://t.co/ll2yu78DGR", - expanded_url: "http://qma-kyushu.sakura.ne.jp/", - display_url: "qma-kyushu.sakura.ne.jp", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [ - { - url: "http://t.co/ezuHyjF4Qy", - expanded_url: "http://twpf.jp/natit_yso", - display_url: "twpf.jp/natit_yso", - indices: [ - 83, - 105 - ] - } - ] - } - }, - protected: false, - followers_count: 591, - friends_count: 548, - listed_count: 93, - created_at: "Tue Dec 30 14:11:44 +0000 2008", - favourites_count: 11676, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: false, - verified: false, - statuses_count: 130145, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "131516", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme14/bg.gif", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme14/bg.gif", - profile_background_tile: true, - profile_image_url: "http://pbs.twimg.com/profile_images/1556202861/chibi-Leon_normal.jpg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/1556202861/chibi-Leon_normal.jpg", - profile_link_color: "009999", - profile_sidebar_border_color: "EEEEEE", - profile_sidebar_fill_color: "EFEFEF", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sat Aug 30 23:12:39 +0000 2014", - id: 505855649196953600, - id_str: "505855649196953600", - text: "●継続試合(中京対崇徳)46回~ 9時~\n 〈ラジオ中継〉\n らじる★らじる→大阪放送局を選択→NHK-FM\n●決勝戦(三浦対中京or崇徳) 12時30分~\n 〈ラジオ中継〉\n らじる★らじる→大阪放送局を選択→NHK第一\n ※神奈川の方は普通のラジオのNHK-FMでも", - source: "Twitter Web Client", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2761692762, - id_str: "2761692762", - name: "三浦学苑軟式野球部応援団!", - screen_name: "oen_yakyu", - location: "", - description: "兵庫県で開催される「もう一つの甲子園」こと全国高校軟式野球選手権大会に南関東ブロックから出場する三浦学苑軟式野球部を応援する非公式アカウントです。", - url: "http://t.co/Cn1tPTsBGY", - entities: { - url: { - urls: [ - { - url: "http://t.co/Cn1tPTsBGY", - expanded_url: "http://www.miura.ed.jp/index.html", - display_url: "miura.ed.jp/index.html", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 464, - friends_count: 117, - listed_count: 4, - created_at: "Sun Aug 24 07:47:29 +0000 2014", - favourites_count: 69, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 553, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/504299474445811712/zsxJUmL0_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/504299474445811712/zsxJUmL0_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2761692762/1409069337", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 7, - favorite_count: 2, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 7, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "oen_yakyu", - name: "三浦学苑軟式野球部応援団!", - id: 2761692762, - id_str: "2761692762", - indices: [ - 3, - 13 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:05 +0000 2014", - id: 505874882110824448, - id_str: "505874882110824448", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "スマホに密封★アニメ画像", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2725976444, - id_str: "2725976444", - name: "スマホに密封★アニメ画像", - screen_name: "sumahoanime", - location: "", - description: "なんともめずらしい、いろんなキャラがスマホに閉じ込められています。 \r\nあなたのスマホにマッチする画像が見つかるかも♪ \r\n気に入ったら是非 RT & フォローお願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 227, - friends_count: 1918, - listed_count: 0, - created_at: "Tue Aug 12 11:27:54 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 527, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/499155646164393984/l5vSz5zu_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/499155646164393984/l5vSz5zu_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2725976444/1407843121", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:05 +0000 2014", - id: 505874881297133568, - id_str: "505874881297133568", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "アナタのそばの身近な危険", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2713926078, - id_str: "2713926078", - name: "アナタのそばの身近な危険", - screen_name: "mijika_kiken", - location: "", - description: "知らないうちにやっている危険な行動を見つけて自分を守りましょう。 役に立つと思ったら RT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 301, - friends_count: 1871, - listed_count: 0, - created_at: "Thu Aug 07 07:12:50 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 644, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/497279579245907968/Ftvms_HR_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/497279579245907968/Ftvms_HR_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2713926078/1407395683", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:04 +0000 2014", - id: 505874880294682624, - id_str: "505874880294682624", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "人気者♥デイジー大好き", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2726199583, - id_str: "2726199583", - name: "人気者♥デイジー大好き", - screen_name: "ninkimono_daosy", - location: "", - description: "デイジーの想いを、代わりにつぶやきます♪ \r\nデイジーのかわいい画像やグッズも大好きw \r\n可愛いと思ったら RT & フォローお願いします。 \r\n「非公式アカウントです」", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 190, - friends_count: 474, - listed_count: 0, - created_at: "Tue Aug 12 12:58:33 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 469, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/499178622494576640/EzWKdR_p_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/499178622494576640/EzWKdR_p_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2726199583/1407848478", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:04 +0000 2014", - id: 505874879392919552, - id_str: "505874879392919552", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "幸せ話でフル充電しよう", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2721453846, - id_str: "2721453846", - name: "幸せ話でフル充電しようww", - screen_name: "shiawasehanashi", - location: "", - description: "私が聞いて心に残った感動エピソードをお届けします。\r\n少しでも多くの人へ届けたいと思います。\r\nいいなと思ったら RT & フォローお願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 302, - friends_count: 1886, - listed_count: 0, - created_at: "Sun Aug 10 12:16:25 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 508, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/498444554916216832/ml8EiQka_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/498444554916216832/ml8EiQka_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2721453846/1407673555", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:04 +0000 2014", - id: 505874879103520768, - id_str: "505874879103520768", - text: "RT @Ang_Angel73: 逢坂「くっ…僕の秘められし右目が…!」\n一同「……………。」", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2571968509, - id_str: "2571968509", - name: "イイヒト", - screen_name: "IwiAlohomora", - location: "草葉の陰", - description: "大人です。気軽に絡んでくれるとうれしいです! イラスト大好き!(≧∇≦) BF(仮)逢坂紘夢くんにお熱です! マンガも好き♡欲望のままにつぶやきますのでご注意を。雑食♡", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 156, - friends_count: 165, - listed_count: 14, - created_at: "Tue Jun 17 01:18:34 +0000 2014", - favourites_count: 11926, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 7234, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/504990074862178304/DoBvOb9c_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/504990074862178304/DoBvOb9c_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2571968509/1409106012", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:27:01 +0000 2014", - id: 505874364596621312, - id_str: "505874364596621313", - text: "逢坂「くっ…僕の秘められし右目が…!」\n一同「……………。」", - source: "Twitter for Android", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1600750194, - id_str: "1600750194", - name: "臙脂", - screen_name: "Ang_Angel73", - location: "逢坂紘夢のそばに", - description: "自由、気ままに。詳しくはツイプロ。アイコンはまめせろりちゃんからだよ☆~(ゝ。∂)", - url: "http://t.co/kKCCwHTaph", - entities: { - url: { - urls: [ - { - url: "http://t.co/kKCCwHTaph", - expanded_url: "http://twpf.jp/Ang_Angel73", - display_url: "twpf.jp/Ang_Angel73", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 155, - friends_count: 154, - listed_count: 10, - created_at: "Wed Jul 17 11:44:31 +0000 2013", - favourites_count: 2115, - utc_offset: 32400, - time_zone: "Irkutsk", - geo_enabled: false, - verified: false, - statuses_count: 12342, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/378800000027871001/aa764602922050b22bf9ade3741367dc.jpeg", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/378800000027871001/aa764602922050b22bf9ade3741367dc.jpeg", - profile_background_tile: true, - profile_image_url: "http://pbs.twimg.com/profile_images/500293786287603713/Ywyh69eG_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/500293786287603713/Ywyh69eG_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1600750194/1403879183", - profile_link_color: "0084B4", - profile_sidebar_border_color: "FFFFFF", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 2, - favorite_count: 2, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 2, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "Ang_Angel73", - name: "臙脂", - id: 1600750194, - id_str: "1600750194", - indices: [ - 3, - 15 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:04 +0000 2014", - id: 505874877933314048, - id_str: "505874877933314048", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "秘密の本音♥女子編", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2762237088, - id_str: "2762237088", - name: "秘密の本音♥女子編", - screen_name: "honne_jyoshi1", - location: "", - description: "普段は言えない「お・ん・なの建前と本音」をつぶやきます。 気になる あの人の本音も、わかるかも!? \r\nわかるって人は RT & フォローを、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 123, - friends_count: 988, - listed_count: 0, - created_at: "Sun Aug 24 12:27:07 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 211, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503519190364332032/BVjS_XBD_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503519190364332032/BVjS_XBD_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2762237088/1408883328", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:04 +0000 2014", - id: 505874877148958720, - id_str: "505874877148958721", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "美し過ぎる★色鉛筆アート", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2740047343, - id_str: "2740047343", - name: "美し過ぎる★色鉛筆アート", - screen_name: "bi_iroenpitu", - location: "", - description: "ほんとにコレ色鉛筆なの~? \r\n本物と見間違える程のリアリティを御覧ください。 \r\n気に入ったら RT & 相互フォローお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 321, - friends_count: 1990, - listed_count: 0, - created_at: "Sun Aug 17 16:15:05 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 396, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501039950972739585/isigil4V_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501039950972739585/isigil4V_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2740047343/1408292283", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:03 +0000 2014", - id: 505874876465295360, - id_str: "505874876465295361", - text: "【H15-9-4】道路を利用する利益は反射的利益であり、建築基準法に基づいて道路一の指定がなされている私道の敷地所有者に対し、通行妨害行為の排除を求める人格的権利を認めることはできない。→誤。", - source: "twittbot.net", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1886570281, - id_str: "1886570281", - name: "行政法過去問", - screen_name: "gyosei_goukaku", - location: "", - description: "行政書士の本試験問題の過去問(行政法分野)をランダムにつぶやきます。問題は随時追加中です。基本的に相互フォローします。※140字制限の都合上、表現は一部変えてあります。解説も文字数が可能であればなるべく…。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 1554, - friends_count: 1772, - listed_count: 12, - created_at: "Fri Sep 20 13:24:29 +0000 2013", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 14565, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/378800000487791870/0e45e3c089c6b641cdd8d1b6f1ceb8a4_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/378800000487791870/0e45e3c089c6b641cdd8d1b6f1ceb8a4_normal.jpeg", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:03 +0000 2014", - id: 505874876318511104, - id_str: "505874876318511104", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "K点越えの発想力!!", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2744863153, - id_str: "2744863153", - name: "K点越えの発想力!!", - screen_name: "kgoehassou", - location: "", - description: "いったいどうやったら、その領域にたどりつけるのか!? \r\nそんな思わず笑ってしまう別世界の発想力をお届けします♪ \r\nおもしろかったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 76, - friends_count: 957, - listed_count: 0, - created_at: "Tue Aug 19 13:00:08 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 341, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501715651686178816/Fgpe0B8M_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501715651686178816/Fgpe0B8M_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2744863153/1408453328", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:03 +0000 2014", - id: 505874875521581056, - id_str: "505874875521581056", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "血液型の真実2", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2698625690, - id_str: "2698625690", - name: "血液型の真実", - screen_name: "ketueki_sinjitu", - location: "", - description: "やっぱりそうだったのか~♪\r\n意外な、あの人の裏側を見つけます。\r\n面白かったらRT & 相互フォローでみなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 193, - friends_count: 1785, - listed_count: 1, - created_at: "Fri Aug 01 16:11:40 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 769, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/495241446706790400/h_0DSFPG_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/495241446706790400/h_0DSFPG_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2698625690/1406911319", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:03 +0000 2014", - id: 505874874712072192, - id_str: "505874874712072192", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "やっぱり神が??を作る時", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2714868440, - id_str: "2714868440", - name: "やっぱり神が??を作る時", - screen_name: "yahari_kamiga", - location: "", - description: "やっぱり今日も、神は何かを作ろうとしています 笑。 どうやって作っているのかわかったら RT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 243, - friends_count: 1907, - listed_count: 0, - created_at: "Thu Aug 07 16:12:33 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 590, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/497416102108884992/NRMEbKaT_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/497416102108884992/NRMEbKaT_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2714868440/1407428237", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:03 +0000 2014", - id: 505874874275864576, - id_str: "505874874275864576", - text: "RT @takuramix: 福島第一原発の構内地図がこちら。\nhttp://t.co/ZkU4TZCGPG\nどう見ても、1号機。\nRT @Lightworker19: 【大拡散】  福島第一原発 4号機 爆発動画 40秒~  http://t.co/lmlgp38fgZ", - source: "ツイタマ", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 62525372, - id_str: "62525372", - name: "NANCY-MOON☆ひよこちゃん☆", - screen_name: "nancy_moon_703", - location: "JAPAN", - description: "【無断転載禁止・コピペ禁止・非公式RT禁止】【必読!】⇒ http://t.co/nuUvfUVD 今現在活動中の東方神起YUNHO&CHANGMINの2人を全力で応援しています!!(^_-)-☆ ※東方神起及びYUNHO&CHANGMINを応援していない方・鍵付ユーザーのフォローお断り!", - url: 0, - entities: { - description: { - urls: [ - { - url: "http://t.co/nuUvfUVD", - expanded_url: "http://goo.gl/SrGLb", - display_url: "goo.gl/SrGLb", - indices: [ - 29, - 49 - ] - } - ] - } - }, - protected: false, - followers_count: 270, - friends_count: 328, - listed_count: 4, - created_at: "Mon Aug 03 14:22:24 +0000 2009", - favourites_count: 3283, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: false, - verified: false, - statuses_count: 180310, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "642D8B", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/470849781397336064/ltM6EdFn.jpeg", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/470849781397336064/ltM6EdFn.jpeg", - profile_background_tile: true, - profile_image_url: "http://pbs.twimg.com/profile_images/3699005246/9ba2e306518d296b68b7cbfa5e4ce4e6_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/3699005246/9ba2e306518d296b68b7cbfa5e4ce4e6_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/62525372/1401094223", - profile_link_color: "FF0000", - profile_sidebar_border_color: "FFFFFF", - profile_sidebar_fill_color: "F065A8", - profile_text_color: "080808", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sat Aug 30 21:21:33 +0000 2014", - id: 505827689660313600, - id_str: "505827689660313600", - text: "福島第一原発の構内地図がこちら。\nhttp://t.co/ZkU4TZCGPG\nどう見ても、1号機。\nRT @Lightworker19: 【大拡散】  福島第一原発 4号機 爆発動画 40秒~  http://t.co/lmlgp38fgZ", - source: "TweetDeck", - truncated: false, - in_reply_to_status_id: 505774460910043136, - in_reply_to_status_id_str: "505774460910043136", - in_reply_to_user_id: 238157843, - in_reply_to_user_id_str: "238157843", - in_reply_to_screen_name: "Lightworker19", - user: { - id: 29599253, - id_str: "29599253", - name: "タクラミックス", - screen_name: "takuramix", - location: "i7", - description: "私の機能一覧:歌う、演劇、ネットワークエンジニア、ライター、プログラマ、翻訳、シルバーアクセサリ、……何をやってる人かは良くわからない人なので、「機能」が欲しい人は私にがっかりするでしょう。私って人間に御用があるなら別ですが。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 5136, - friends_count: 724, - listed_count: 335, - created_at: "Wed Apr 08 01:10:58 +0000 2009", - favourites_count: 21363, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: false, - verified: false, - statuses_count: 70897, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/2049751947/takuramix1204_normal.jpg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/2049751947/takuramix1204_normal.jpg", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 1, - favorite_count: 1, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/ZkU4TZCGPG", - expanded_url: "http://www.tepco.co.jp/nu/fukushima-np/review/images/review1_01.gif", - display_url: "tepco.co.jp/nu/fukushima-n…", - indices: [ - 17, - 39 - ] - }, - { - url: "http://t.co/lmlgp38fgZ", - expanded_url: "http://youtu.be/gDXEhyuVSDk", - display_url: "youtu.be/gDXEhyuVSDk", - indices: [ - 99, - 121 - ] - } - ], - user_mentions: [ - { - screen_name: "Lightworker19", - name: "Lightworker", - id: 238157843, - id_str: "238157843", - indices: [ - 54, - 68 - ] - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - retweet_count: 1, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/ZkU4TZCGPG", - expanded_url: "http://www.tepco.co.jp/nu/fukushima-np/review/images/review1_01.gif", - display_url: "tepco.co.jp/nu/fukushima-n…", - indices: [ - 32, - 54 - ] - }, - { - url: "http://t.co/lmlgp38fgZ", - expanded_url: "http://youtu.be/gDXEhyuVSDk", - display_url: "youtu.be/gDXEhyuVSDk", - indices: [ - 114, - 136 - ] - } - ], - user_mentions: [ - { - screen_name: "takuramix", - name: "タクラミックス", - id: 29599253, - id_str: "29599253", - indices: [ - 3, - 13 - ] - }, - { - screen_name: "Lightworker19", - name: "Lightworker", - id: 238157843, - id_str: "238157843", - indices: [ - 69, - 83 - ] - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:03 +0000 2014", - id: 505874873961308160, - id_str: "505874873961308160", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "やっぱりアナ雪が好き♥", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2714052962, - id_str: "2714052962", - name: "やっぱりアナ雪が好き♥", - screen_name: "anayuki_suki", - location: "", - description: "なんだかんだ言ってもやっぱりアナ雪が好きなんですよね~♪ \r\n私も好きって人は RT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 368, - friends_count: 1826, - listed_count: 1, - created_at: "Thu Aug 07 08:29:13 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 670, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/497299646662705153/KMo3gkv7_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/497299646662705153/KMo3gkv7_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2714052962/1407400477", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "zh" - }, - created_at: "Sun Aug 31 00:29:03 +0000 2014", - id: 505874873759977472, - id_str: "505874873759977473", - text: "四川盆地江淮等地将有强降雨 开学日多地将有雨:   中新网8月31日电 据中央气象台消息,江淮东部、四川盆地东北部等地今天(31日)又将迎来一场暴雨或大暴雨天气。明天9月1日,是中小学生开学的日子。预计明天,内蒙古中部、... http://t.co/toQgVlXPyH", - source: "twitterfeed", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2281979863, - id_str: "2281979863", - name: "News 24h China", - screen_name: "news24hchn", - location: "", - description: "", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 719, - friends_count: 807, - listed_count: 7, - created_at: "Wed Jan 08 10:56:04 +0000 2014", - favourites_count: 0, - utc_offset: 7200, - time_zone: "Amsterdam", - geo_enabled: false, - verified: false, - statuses_count: 94782, - lang: "it", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/452558963754561536/QPID3isM.jpeg", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/452558963754561536/QPID3isM.jpeg", - profile_background_tile: true, - profile_image_url: "http://pbs.twimg.com/profile_images/439031926569979904/SlBH9iMg_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/439031926569979904/SlBH9iMg_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2281979863/1393508427", - profile_link_color: "0084B4", - profile_sidebar_border_color: "FFFFFF", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/toQgVlXPyH", - expanded_url: "http://news24h.allnews24h.com/FX54", - display_url: "news24h.allnews24h.com/FX54", - indices: [ - 114, - 136 - ] - } - ], - user_mentions: [] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "zh" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:03 +0000 2014", - id: 505874873248268288, - id_str: "505874873248268288", - text: "@Take3carnifex それは大変!一大事!命に関わります!\n是非うちに受診して下さい!", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 505874353716600832, - in_reply_to_status_id_str: "505874353716600832", - in_reply_to_user_id: 535179785, - in_reply_to_user_id_str: "535179785", - in_reply_to_screen_name: "Take3carnifex", - user: { - id: 226897125, - id_str: "226897125", - name: "ひかり@hack", - screen_name: "hikari_thirteen", - location: "", - description: "hackというバンドで、ギターを弾いています。 モンハンとポケモンが好き。 \nSPRING WATER リードギター(ヘルプ)\nROCK OUT レギュラーDJ", - url: "http://t.co/SQLZnvjVxB", - entities: { - url: { - urls: [ - { - url: "http://t.co/SQLZnvjVxB", - expanded_url: "http://s.ameblo.jp/hikarihikarimay", - display_url: "s.ameblo.jp/hikarihikarimay", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 296, - friends_count: 348, - listed_count: 3, - created_at: "Wed Dec 15 10:51:51 +0000 2010", - favourites_count: 33, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: false, - verified: false, - statuses_count: 3293, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "131516", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme14/bg.gif", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme14/bg.gif", - profile_background_tile: true, - profile_image_url: "http://pbs.twimg.com/profile_images/378800000504584690/8ccba98eda8c0fd1d15a74e401f621d1_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/378800000504584690/8ccba98eda8c0fd1d15a74e401f621d1_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/226897125/1385551752", - profile_link_color: "009999", - profile_sidebar_border_color: "EEEEEE", - profile_sidebar_fill_color: "EFEFEF", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "Take3carnifex", - name: "Take3", - id: 535179785, - id_str: "535179785", - indices: [ - 0, - 14 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:03 +0000 2014", - id: 505874873223110656, - id_str: "505874873223110656", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "今どき女子高生の謎w", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2744236873, - id_str: "2744236873", - name: "今どき女子高生の謎w", - screen_name: "imadokijoshiko", - location: "", - description: "思わず耳を疑う男性の方の夢を壊してしまう、\r\n女子高生達のディープな世界を見てください☆ \r\nおもしろいと思ったら RT & 相互フォローでお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 79, - friends_count: 973, - listed_count: 0, - created_at: "Tue Aug 19 07:06:47 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 354, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501627015980535808/avWBgkDh_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501627015980535808/avWBgkDh_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2744236873/1408432455", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:02 +0000 2014", - id: 505874872463925248, - id_str: "505874872463925248", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "私の理想の男性像", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2761782601, - id_str: "2761782601", - name: "私の理想の男性像", - screen_name: "risou_dansei", - location: "", - description: "こんな男性♥ ほんとにいるのかしら!? \r\n「いたらいいのになぁ」っていう理想の男性像をを、私目線でつぶやきます。 \r\nいいなと思った人は RT & フォローお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 69, - friends_count: 974, - listed_count: 0, - created_at: "Sun Aug 24 08:03:32 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 208, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503452833719410688/tFU509Yk_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503452833719410688/tFU509Yk_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2761782601/1408867519", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:02 +0000 2014", - id: 505874871713157120, - id_str: "505874871713157120", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "激アツ★6秒動画", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2725690658, - id_str: "2725690658", - name: "激アツ★6秒動画", - screen_name: "gekiatu_6byou", - location: "", - description: "話題の6秒動画! \r\n思わず「ほんとかよっ」てツッコんでしまう内容のオンパレード! \r\nおもしろかったら、是非 RT & フォローお願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 195, - friends_count: 494, - listed_count: 0, - created_at: "Tue Aug 12 08:17:29 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 477, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/499107997444886528/3rl6FrIk_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/499107997444886528/3rl6FrIk_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2725690658/1407832963", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:02 +0000 2014", - id: 505874871616671744, - id_str: "505874871616671744", - text: "爆笑ww珍解答集!\n先生のツメの甘さと生徒のセンスを感じる一問一答だとFBでも話題!!\nうどん天下一決定戦ウィンドウズ9三重高校竹内由恵アナ花火保険\nhttp://t.co/jRWJt8IrSB http://t.co/okrAoxSbt0", - source: "笑える博物館", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2748747362, - id_str: "2748747362", - name: "笑える博物館", - screen_name: "waraeru_kan", - location: "", - description: "", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 19, - friends_count: 10, - listed_count: 0, - created_at: "Wed Aug 20 11:11:04 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 15137, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://abs.twimg.com/sticky/default_profile_images/default_profile_4_normal.png", - profile_image_url_https: "https://abs.twimg.com/sticky/default_profile_images/default_profile_4_normal.png", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: true, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/jRWJt8IrSB", - expanded_url: "http://bit.ly/1qBa1nl", - display_url: "bit.ly/1qBa1nl", - indices: [ - 75, - 97 - ] - } - ], - user_mentions: [], - media: [ - { - id: 505874871344066560, - id_str: "505874871344066560", - indices: [ - 98, - 120 - ], - media_url: "http://pbs.twimg.com/media/BwU6g-dCcAALxAW.png", - media_url_https: "https://pbs.twimg.com/media/BwU6g-dCcAALxAW.png", - url: "http://t.co/okrAoxSbt0", - display_url: "pic.twitter.com/okrAoxSbt0", - expanded_url: "http://twitter.com/waraeru_kan/status/505874871616671744/photo/1", - type: "photo", - sizes: { - small: { - w: 340, - h: 425, - resize: "fit" - }, - thumb: { - w: 150, - h: 150, - resize: "crop" - }, - large: { - w: 600, - h: 750, - resize: "fit" - }, - medium: { - w: 600, - h: 750, - resize: "fit" - } - } - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:02 +0000 2014", - id: 505874871268540416, - id_str: "505874871268540416", - text: "@nasan_arai \n名前→なーさん\n第一印象→誰。(´・_・`)\n今の印象→れいら♡\nLINE交換できる?→してる(「・ω・)「\n好きなところ→可愛い優しい優しい優しい\n最後に一言→なーさん好き〜(´・_・`)♡GEM現場おいでね(´・_・`)♡\n\n#ふぁぼした人にやる", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 1717603286, - in_reply_to_user_id_str: "1717603286", - in_reply_to_screen_name: "nasan_arai", - user: { - id: 2417626784, - id_str: "2417626784", - name: "✩.ゆきଘ(*´꒳`)", - screen_name: "Ymaaya_gem", - location: "", - description: "⁽⁽٩( ᐖ )۶⁾⁾ ❤︎ 武 田 舞 彩 ❤︎ ₍₍٩( ᐛ )۶₎₎", - url: "http://t.co/wR0Qb76TbB", - entities: { - url: { - urls: [ - { - url: "http://t.co/wR0Qb76TbB", - expanded_url: "http://twpf.jp/Ymaaya_gem", - display_url: "twpf.jp/Ymaaya_gem", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 198, - friends_count: 245, - listed_count: 1, - created_at: "Sat Mar 29 16:03:06 +0000 2014", - favourites_count: 3818, - utc_offset: 0, - time_zone: 0, - geo_enabled: true, - verified: false, - statuses_count: 8056, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/505516858816987136/4gFGjHzu_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/505516858816987136/4gFGjHzu_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2417626784/1407764793", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [ - { - text: "ふぁぼした人にやる", - indices: [ - 128, - 138 - ] - } - ], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "nasan_arai", - name: "なーさん", - id: 1717603286, - id_str: "1717603286", - indices: [ - 0, - 11 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:02 +0000 2014", - id: 505874871218225152, - id_str: "505874871218225152", - text: "\"ソードマスター\"剣聖カミイズミ (CV:緑川光)-「ソードマスター」のアスタリスク所持者\n第一師団団長にして「剣聖」の称号を持つ剣士。イデアの剣の師匠。 \n敵味方からも尊敬される一流の武人。", - source: "twittbot.net", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1435517814, - id_str: "1435517814", - name: "俺、関係ないよ?", - screen_name: "BDFF_LOVE", - location: "ルクセンダルクorリングアベルさんの隣", - description: "自分なりに生きる人、最後まであきらめないの。でも、フォローありがとう…。@ringo_BDFFLOVE ←は、妹です。時々、会話します。「現在BOTで、BDFFのこと呟くよ!」夜は、全滅 「BDFFプレイ中」詳しくは、ツイプロみてください!(絶対)", - url: "http://t.co/5R4dzpbWX2", - entities: { - url: { - urls: [ - { - url: "http://t.co/5R4dzpbWX2", - expanded_url: "http://twpf.jp/BDFF_LOVE", - display_url: "twpf.jp/BDFF_LOVE", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 1066, - friends_count: 1799, - listed_count: 6, - created_at: "Fri May 17 12:33:23 +0000 2013", - favourites_count: 1431, - utc_offset: 32400, - time_zone: "Irkutsk", - geo_enabled: true, - verified: false, - statuses_count: 6333, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/505696320380612608/qvaxb_zx_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/505696320380612608/qvaxb_zx_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1435517814/1409401948", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:02 +0000 2014", - id: 505874871130136576, - id_str: "505874871130136576", - text: "闇「リンと付き合うに当たって歳の差以外にもいろいろ壁があったんだよ。愛し隊の妨害とか風紀厨の生徒会長とか…」\n一号「リンちゃんを泣かせたらシメるかんね!」\n二号「リンちゃんにやましい事したら×す…」\n執行部「不純な交際は僕が取り締まろうじゃないか…」\n闇「(消される)」", - source: "twittbot.net", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2386208737, - id_str: "2386208737", - name: "闇未来Bot", - screen_name: "StxRinFbot", - location: "DIVAルーム", - description: "ProjectDIVAのモジュール・ストレンジダーク×鏡音リンFutureStyleの自己満足非公式Bot マセレン仕様。CP要素あります。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 7, - friends_count: 2, - listed_count: 0, - created_at: "Thu Mar 13 02:58:09 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 4876, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/443948925351755776/6rmljL5C_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/443948925351755776/6rmljL5C_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2386208737/1396259004", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:02 +0000 2014", - id: 505874870933016576, - id_str: "505874870933016576", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "絶品!!スイーツ天国", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2725681663, - id_str: "2725681663", - name: "絶品!!スイーツ天国", - screen_name: "suitestengoku", - location: "", - description: "美味しそうなスイーツって、見てるだけで幸せな気分になれますね♪\r\nそんな素敵なスイーツに出会いたいです。\r\n食べたいと思ったら是非 RT & フォローお願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 401, - friends_count: 1877, - listed_count: 1, - created_at: "Tue Aug 12 07:43:52 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 554, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/499099533507178496/g5dNpArt_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/499099533507178496/g5dNpArt_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2725681663/1407829743", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:02 +0000 2014", - id: 505874870148669440, - id_str: "505874870148669440", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "電車厳禁!!おもしろ話", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2699667800, - id_str: "2699667800", - name: "電車厳禁!!おもしろ話w", - screen_name: "dengeki_omoro", - location: "", - description: "日常のオモシロくて笑える場面を探します♪\r\n面白かったらRT & 相互フォローでみなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 461, - friends_count: 1919, - listed_count: 0, - created_at: "Sat Aug 02 02:16:32 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 728, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/495400387961036800/BBMb_hcG_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/495400387961036800/BBMb_hcG_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2699667800/1406947654", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:02 +0000 2014", - id: 505874869339189248, - id_str: "505874869339189249", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "笑えるwwランキング2", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2695745652, - id_str: "2695745652", - name: "笑えるwwランキング", - screen_name: "wara_runk", - location: "", - description: "知ってると使えるランキングを探そう。\r\n面白かったらRT & 相互フォローでみなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 314, - friends_count: 1943, - listed_count: 1, - created_at: "Thu Jul 31 13:51:57 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 737, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/494844659856728064/xBQfnm5J_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/494844659856728064/xBQfnm5J_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2695745652/1406815103", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:02 +0000 2014", - id: 505874868533854208, - id_str: "505874868533854209", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "スニーカー大好き★図鑑", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2707963890, - id_str: "2707963890", - name: "スニーカー大好き★図鑑", - screen_name: "sunikar_daisuki", - location: "", - description: "スニーカー好きを見つけて仲間になろう♪\r\n気に入ったら RT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 394, - friends_count: 1891, - listed_count: 0, - created_at: "Tue Aug 05 01:54:28 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 642, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/496474952631996416/f0C_u3_u_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/496474952631996416/f0C_u3_u_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2707963890/1407203869", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "zh" - }, - created_at: "Sun Aug 31 00:29:01 +0000 2014", - id: 505874867997380608, - id_str: "505874867997380608", - text: "\"@BelloTexto: ¿Quieres ser feliz? \n一\"No stalkees\" \n一\"No stalkees\" \n一\"No stalkees\" \n一\"No stalkees\" \n一\"No stalkees\" \n一\"No stalkees\".\"", - source: "Twitter for Android", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2249378935, - id_str: "2249378935", - name: "Maggie Becerril ", - screen_name: "maggdesie", - location: "", - description: "cambiando la vida de las personas.", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 120, - friends_count: 391, - listed_count: 0, - created_at: "Mon Dec 16 21:56:49 +0000 2013", - favourites_count: 314, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 1657, - lang: "es", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/505093371665604608/K0x_LV2y_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/505093371665604608/K0x_LV2y_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2249378935/1409258479", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "BelloTexto", - name: "Indirectas... ✉", - id: 833083404, - id_str: "833083404", - indices: [ - 1, - 12 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "zh" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:01 +0000 2014", - id: 505874867720183808, - id_str: "505874867720183808", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "ザ・異性の裏の顔", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2719746578, - id_str: "2719746578", - name: "ザ・異性の裏の顔", - screen_name: "iseiuragao", - location: "", - description: "異性について少し学ぶことで、必然的にモテるようになる!? 相手を理解することで見えてくるもの「それは・・・●●」 いい内容だと思ったら RT & フォローもお願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 238, - friends_count: 1922, - listed_count: 0, - created_at: "Sat Aug 09 17:18:43 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 532, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/498157077726900224/tW8q4di__normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/498157077726900224/tW8q4di__normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2719746578/1407604947", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:01 +0000 2014", - id: 505874866910687232, - id_str: "505874866910687233", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "超w美女☆アルバム", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2744054334, - id_str: "2744054334", - name: "超w美女☆アルバム", - screen_name: "bijyoalbum", - location: "", - description: "「おお~っ!いいね~」って、思わず言ってしまう、美女を見つけます☆ \r\nタイプだと思ったら RT & 相互フォローでお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 45, - friends_count: 966, - listed_count: 0, - created_at: "Tue Aug 19 05:36:48 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 352, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501604413312491520/GP66eKWr_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501604413312491520/GP66eKWr_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2744054334/1408426814", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:01 +0000 2014", - id: 505874866105376768, - id_str: "505874866105376769", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "男に見せない女子の裏生態", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2744261238, - id_str: "2744261238", - name: "男に見せない女子の裏生態", - screen_name: "jyoshiuraseitai", - location: "", - description: "男の知らない女子ならではのあるある☆ \r\nそんな生々しい女子の生態をつぶやきます。 \r\nわかる~って人は RT & フォローでお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 203, - friends_count: 967, - listed_count: 0, - created_at: "Tue Aug 19 08:01:28 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 348, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501641354804346880/Uh1-n1LD_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501641354804346880/Uh1-n1LD_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2744261238/1408435630", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:01 +0000 2014", - id: 505874865354584064, - id_str: "505874865354584064", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "驚きの動物たちの生態", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2759403146, - id_str: "2759403146", - name: "驚きの動物たちの生態", - screen_name: "soubutu_seitai", - location: "", - description: "「おお~っ」と 言われるような、動物の生態をツイートします♪ \r\n知っていると、あなたも人気者に!? \r\nおもしろかったら RT & フォローを、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 67, - friends_count: 954, - listed_count: 0, - created_at: "Sat Aug 23 16:39:31 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 219, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503220468128567296/Z8mGDIBS_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503220468128567296/Z8mGDIBS_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2759403146/1408812130", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:01 +0000 2014", - id: 505874864603820032, - id_str: "505874864603820032", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "モテ女子★ファションの秘密", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2706659820, - id_str: "2706659820", - name: "モテ女子★ファションの秘密", - screen_name: "mote_woman", - location: "", - description: "オシャレかわいい♥モテ度UPの注目アイテムを見つけます。\r\n気に入ったら RT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 217, - friends_count: 1806, - listed_count: 0, - created_at: "Mon Aug 04 14:30:24 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 682, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/496303370936668161/s7xP8rTy_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/496303370936668161/s7xP8rTy_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2706659820/1407163059", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:00 +0000 2014", - id: 505874863874007040, - id_str: "505874863874007040", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "男女の違いを解明する", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2761896468, - id_str: "2761896468", - name: "男女の違いを解明する", - screen_name: "danjyonotigai1", - location: "", - description: "意外と理解できていない男女それぞれの事情。 \r\n「えっ マジで!?」と驚くような、男女の習性をつぶやきます♪ ためになったら、是非 RT & フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 82, - friends_count: 992, - listed_count: 0, - created_at: "Sun Aug 24 09:47:44 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 237, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503479057380413441/zDLu5Z9o_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503479057380413441/zDLu5Z9o_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2761896468/1408873803", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:00 +0000 2014", - id: 505874862900924416, - id_str: "505874862900924416", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "神レベル★極限の発想", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2744950735, - id_str: "2744950735", - name: "神レベル★極限の発想", - screen_name: "kamihassou", - location: "", - description: "見ているだけで、本気がビシバシ伝わってきます! \r\n人生のヒントになるような、そんな究極の発想を集めています。 \r\nいいなと思ったら RT & 相互フォローで、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 84, - friends_count: 992, - listed_count: 0, - created_at: "Tue Aug 19 13:36:05 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 343, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501725053189226496/xZNOTYz2_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501725053189226496/xZNOTYz2_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2744950735/1408455571", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:00 +0000 2014", - id: 505874862397591552, - id_str: "505874862397591552", - text: "@kaoritoxx そうよ!あたしはそう思うようにしておる。いま職場一やけとる気がする(°_°)!満喫幸せ焼け!!wあー、なるほどね!毎回そうだよね!ティアラちゃんみにいってるもんね♡五月と九月恐ろしい、、、\nハリポタエリアはいった??", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 505838547308277760, - in_reply_to_status_id_str: "505838547308277761", - in_reply_to_user_id: 796000214, - in_reply_to_user_id_str: "796000214", - in_reply_to_screen_name: "kaoritoxx", - user: { - id: 2256249487, - id_str: "2256249487", - name: "はあちゃん@海賊同盟中", - screen_name: "onepiece_24", - location: "どえすえろぉたんの助手兼ね妹(願望)", - description: "ONE PIECE愛しすぎて今年23ちゃい(歴14年目)ゾロ様に一途だったのにロー、このやろー。ロビンちゃんが幸せになればいい。ルフィは無条件にすき。ゾロビン、ローロビ、ルロビ♡usj、声優さん、コナン、進撃、クレしん、H x Hも好き♩", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 415, - friends_count: 384, - listed_count: 3, - created_at: "Sat Dec 21 09:37:25 +0000 2013", - favourites_count: 1603, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 9636, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501686340564418561/hMQFN4vD_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501686340564418561/hMQFN4vD_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2256249487/1399987924", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "kaoritoxx", - name: "かおちゃん", - id: 796000214, - id_str: "796000214", - indices: [ - 0, - 10 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:00 +0000 2014", - id: 505874861973991424, - id_str: "505874861973991424", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "恋愛仙人", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2698885082, - id_str: "2698885082", - name: "恋愛仙人", - screen_name: "renai_sennin", - location: "", - description: "豊富でステキな恋愛経験を、シェアしましょう。\r\n面白かったらRT & 相互フォローでみなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 618, - friends_count: 1847, - listed_count: 1, - created_at: "Fri Aug 01 18:09:38 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 726, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/495272204641132544/GNA18aOg_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/495272204641132544/GNA18aOg_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2698885082/1406917096", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:00 +0000 2014", - id: 505874861881700352, - id_str: "505874861881700353", - text: "@itsukibot_ 一稀の俺のソーセージをペロペロする音はデカイ", - source: "jigtwi", - truncated: false, - in_reply_to_status_id: 505871017428795392, - in_reply_to_status_id_str: "505871017428795392", - in_reply_to_user_id: 141170845, - in_reply_to_user_id_str: "141170845", - in_reply_to_screen_name: "itsukibot_", - user: { - id: 2184752048, - id_str: "2184752048", - name: "アンドー", - screen_name: "55dakedayo", - location: "", - description: "", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 15, - friends_count: 24, - listed_count: 0, - created_at: "Sat Nov 09 17:42:22 +0000 2013", - favourites_count: 37249, - utc_offset: 32400, - time_zone: "Irkutsk", - geo_enabled: false, - verified: false, - statuses_count: 21070, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://abs.twimg.com/sticky/default_profile_images/default_profile_3_normal.png", - profile_image_url_https: "https://abs.twimg.com/sticky/default_profile_images/default_profile_3_normal.png", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: true, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "itsukibot_", - name: "前田一稀", - id: 141170845, - id_str: "141170845", - indices: [ - 0, - 11 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:00 +0000 2014", - id: 505874861185437696, - id_str: "505874861185437697", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "あの伝説の名ドラマ&名場面", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2706951979, - id_str: "2706951979", - name: "あの伝説の名ドラマ&名場面", - screen_name: "densetunodorama", - location: "", - description: "誰にでも記憶に残る、ドラマの名場面があると思います。そんな感動のストーリーを、もう一度わかちあいたいです。\r\n「これ知ってる!」とか「あ~懐かしい」と思ったら RT & 相互フォローでみなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 300, - friends_count: 1886, - listed_count: 0, - created_at: "Mon Aug 04 16:38:25 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 694, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/496335892152209408/fKzb8Nv3_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/496335892152209408/fKzb8Nv3_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2706951979/1407170704", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:29:00 +0000 2014", - id: 505874860447260672, - id_str: "505874860447260672", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "マジで食べたい♥ケーキ特集", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2724328646, - id_str: "2724328646", - name: "マジで食べたい♥ケーキ特集", - screen_name: "tabetaicake1", - location: "", - description: "女性の目線から見た、美味しそうなケーキを探し求めています。\r\n見てるだけで、あれもコレも食べたくなっちゃう♪\r\n美味しそうだと思ったら、是非 RT & フォローお願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 158, - friends_count: 1907, - listed_count: 0, - created_at: "Mon Aug 11 17:15:22 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 493, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/498881289844293632/DAa9No9M_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/498881289844293632/DAa9No9M_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2724328646/1407777704", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:59 +0000 2014", - id: 505874859662925824, - id_str: "505874859662925824", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "アディダス★マニア", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2704003662, - id_str: "2704003662", - name: "アディダス★マニア", - screen_name: "adi_mania11", - location: "", - description: "素敵なアディダスのアイテムを見つけたいです♪\r\n気に入ってもらえたららRT & 相互フォローで みなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 340, - friends_count: 1851, - listed_count: 0, - created_at: "Sun Aug 03 12:26:37 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 734, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/495911561781727235/06QAMVrR_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/495911561781727235/06QAMVrR_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2704003662/1407069046", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:59 +0000 2014", - id: 505874858920513536, - id_str: "505874858920513537", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "萌えペット大好き", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2719061228, - id_str: "2719061228", - name: "萌えペット大好き", - screen_name: "moe_pet1", - location: "", - description: "かわいいペットを見るのが趣味です♥そんな私と一緒にいやされたい人いませんか?かわいいと思ったら RT & フォローもお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 289, - friends_count: 1812, - listed_count: 0, - created_at: "Sat Aug 09 10:20:25 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 632, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/498051549537386496/QizThq7N_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/498051549537386496/QizThq7N_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2719061228/1407581287", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:59 +0000 2014", - id: 505874858115219456, - id_str: "505874858115219456", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "恋愛の教科書 ", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2744344514, - id_str: "2744344514", - name: "恋愛の教科書", - screen_name: "renaikyoukasyo", - location: "", - description: "もっと早く知っとくべきだった~!知っていればもっと上手くいく♪ \r\n今すぐ役立つ恋愛についての雑学やマメ知識をお届けします。 \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 124, - friends_count: 955, - listed_count: 0, - created_at: "Tue Aug 19 08:32:45 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 346, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501655512018997248/7SznYGWi_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501655512018997248/7SznYGWi_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2744344514/1408439001", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:59 +0000 2014", - id: 505874857335074816, - id_str: "505874857335074816", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "オモロすぎる★学生の日常", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2699365116, - id_str: "2699365116", - name: "オモロすぎる★学生の日常", - screen_name: "omorogakusei", - location: "", - description: "楽しすぎる学生の日常を探していきます。\r\n面白かったらRT & 相互フォローでみなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 289, - friends_count: 1156, - listed_count: 2, - created_at: "Fri Aug 01 23:35:18 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 770, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/495353473886478336/S-4B_RVl_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/495353473886478336/S-4B_RVl_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2699365116/1406936481", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:59 +0000 2014", - id: 505874856605257728, - id_str: "505874856605257728", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "憧れの★インテリア図鑑", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2721907602, - id_str: "2721907602", - name: "憧れの★インテリア図鑑", - screen_name: "akogareinteria", - location: "", - description: "自分の住む部屋もこんなふうにしてみたい♪ \r\nそんな素敵なインテリアを、日々探していますw \r\nいいなと思ったら RT & 相互フォローお願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 298, - friends_count: 1925, - listed_count: 0, - created_at: "Sun Aug 10 15:59:13 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 540, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/498499374423343105/Wi_izHvT_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/498499374423343105/Wi_izHvT_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2721907602/1407686543", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:59 +0000 2014", - id: 505874856089378816, - id_str: "505874856089378816", - text: "天冥の標 VI 宿怨 PART1 / 小川 一水\nhttp://t.co/fXIgRt4ffH\n \n#キンドル #天冥の標VI宿怨PART1", - source: "waromett", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1953404612, - id_str: "1953404612", - name: "わろめっと", - screen_name: "waromett", - location: "", - description: "たのしいついーとしょうかい", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 16980, - friends_count: 16983, - listed_count: 18, - created_at: "Fri Oct 11 05:49:57 +0000 2013", - favourites_count: 3833, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: false, - verified: false, - statuses_count: 98655, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "352726", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme5/bg.gif", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme5/bg.gif", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/378800000578908101/14c4744c7aa34b1f8bbd942b78e59385_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/378800000578908101/14c4744c7aa34b1f8bbd942b78e59385_normal.jpeg", - profile_link_color: "D02B55", - profile_sidebar_border_color: "829D5E", - profile_sidebar_fill_color: "99CC33", - profile_text_color: "3E4415", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [ - { - text: "キンドル", - indices: [ - 50, - 55 - ] - }, - { - text: "天冥の標VI宿怨PART1", - indices: [ - 56, - 70 - ] - } - ], - symbols: [], - urls: [ - { - url: "http://t.co/fXIgRt4ffH", - expanded_url: "http://j.mp/1kHBOym", - display_url: "j.mp/1kHBOym", - indices: [ - 25, - 47 - ] - } - ], - user_mentions: [] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "zh" - }, - created_at: "Sun Aug 31 00:28:58 +0000 2014", - id: 505874855770599424, - id_str: "505874855770599425", - text: "四川盆地江淮等地将有强降雨 开学日多地将有雨:   中新网8月31日电 据中央气象台消息,江淮东部、四川盆地东北部等地今天(31日)又将迎来一场暴雨或大暴雨天气。明天9月1日,是中小学生开学的日子。预计明天,内蒙古中部、... http://t.co/RNdqIHmTby", - source: "twitterfeed", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 402427654, - id_str: "402427654", - name: "中国新闻", - screen_name: "zhongwenxinwen", - location: "", - description: "中国的新闻,世界的新闻。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 2429, - friends_count: 15, - listed_count: 29, - created_at: "Tue Nov 01 01:56:43 +0000 2011", - favourites_count: 0, - utc_offset: -28800, - time_zone: "Alaska", - geo_enabled: false, - verified: false, - statuses_count: 84564, - lang: "zh-cn", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "709397", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme6/bg.gif", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme6/bg.gif", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/2700523149/5597e347b2eb880425faef54287995f2_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/2700523149/5597e347b2eb880425faef54287995f2_normal.jpeg", - profile_link_color: "FF3300", - profile_sidebar_border_color: "86A4A6", - profile_sidebar_fill_color: "A0C5C7", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/RNdqIHmTby", - expanded_url: "http://bit.ly/1tOdNsI", - display_url: "bit.ly/1tOdNsI", - indices: [ - 114, - 136 - ] - } - ], - user_mentions: [] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "zh" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:58 +0000 2014", - id: 505874854877200384, - id_str: "505874854877200384", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "LDH ★大好き応援団", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2700961603, - id_str: "2700961603", - name: "LDH ★大好き応援団", - screen_name: "LDH_daisuki1", - location: "", - description: "LDHファンは、全員仲間です♪\r\n面白かったらRT & 相互フォローでみなさん、お願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 458, - friends_count: 1895, - listed_count: 0, - created_at: "Sat Aug 02 14:23:46 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 735, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/495578007298252800/FOZflgYu_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/495578007298252800/FOZflgYu_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2700961603/1406989928", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:58 +0000 2014", - id: 505874854147407872, - id_str: "505874854147407872", - text: "RT @shiawaseomamori: 一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるの…", - source: "マジ!?怖いアニメ都市伝説", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2719489172, - id_str: "2719489172", - name: "マジ!?怖いアニメ都市伝説", - screen_name: "anime_toshiden1", - location: "", - description: "あなたの知らない、怖すぎるアニメの都市伝説を集めています。\r\n「え~知らなかったよww]」って人は RT & フォローお願いします♪", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 377, - friends_count: 1911, - listed_count: 1, - created_at: "Sat Aug 09 14:41:15 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 536, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/498118027322208258/h7XOTTSi_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/498118027322208258/h7XOTTSi_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2719489172/1407595513", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:06 +0000 2014", - id: 505871615125491712, - id_str: "505871615125491712", - text: "一に止まると書いて、正しいという意味だなんて、この年になるまで知りませんでした。 人は生きていると、前へ前へという気持ちばかり急いて、どんどん大切なものを置き去りにしていくものでしょう。本当に正しいことというのは、一番初めの場所にあるのかもしれません。 by神様のカルテ、夏川草介", - source: "幸せの☆お守り", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2745121514, - id_str: "2745121514", - name: "幸せの☆お守り", - screen_name: "shiawaseomamori", - location: "", - description: "自分が幸せだと周りも幸せにできる! \r\nそんな人生を精一杯生きるために必要な言葉をお届けします♪ \r\nいいなと思ったら RT & 相互フォローで、お願いします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 213, - friends_count: 991, - listed_count: 0, - created_at: "Tue Aug 19 14:45:19 +0000 2014", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 349, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2745121514/1408459730", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 58, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "shiawaseomamori", - name: "幸せの☆お守り", - id: 2745121514, - id_str: "2745121514", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:58 +0000 2014", - id: 505874854134820864, - id_str: "505874854134820864", - text: "@vesperia1985 おはよー!\n今日までなのですよ…!!明日一生来なくていい", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 505868030329364480, - in_reply_to_status_id_str: "505868030329364480", - in_reply_to_user_id: 2286548834, - in_reply_to_user_id_str: "2286548834", - in_reply_to_screen_name: "vesperia1985", - user: { - id: 2389045190, - id_str: "2389045190", - name: "りいこ", - screen_name: "riiko_dq10", - location: "", - description: "サマーエルフです、りいこです。えるおくんラブです!随時ふれぼしゅ〜〜(っ˘ω˘c )*日常のどうでもいいことも呟いてますがよろしくね〜", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 67, - friends_count: 69, - listed_count: 0, - created_at: "Fri Mar 14 13:02:27 +0000 2014", - favourites_count: 120, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 324, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/503906346815610881/BfSrCoBr_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/503906346815610881/BfSrCoBr_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2389045190/1409232058", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "vesperia1985", - name: "ユーリ", - id: 2286548834, - id_str: "2286548834", - indices: [ - 0, - 13 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:58 +0000 2014", - id: 505874853778685952, - id_str: "505874853778685952", - text: "【映画パンフレット】 永遠の0 (永遠のゼロ) 監督 山崎貴 キャスト 岡田准一、三浦春馬、井上真央東宝(2)11点の新品/中古品を見る: ¥ 500より\n(この商品の現在のランクに関する正式な情報については、アートフレーム... http://t.co/4hbyB1rbQ7", - source: "IFTTT", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1319883571, - id_str: "1319883571", - name: "森林木工家具製作所", - screen_name: "Furniturewood", - location: "沖縄", - description: "家具(かぐ、Furniture)は、家財道具のうち家の中に据え置いて利用する比較的大型の道具類、または元々家に作り付けられている比較的大型の道具類をさす。なお、日本の建築基準法上は、作り付け家具は、建築確認及び完了検査の対象となるが、後から置かれるものについては対象外である。", - url: "http://t.co/V4oyL0xtZk", - entities: { - url: { - urls: [ - { - url: "http://t.co/V4oyL0xtZk", - expanded_url: "http://astore.amazon.co.jp/furniturewood-22", - display_url: "astore.amazon.co.jp/furniturewood-…", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 677, - friends_count: 743, - listed_count: 1, - created_at: "Mon Apr 01 07:55:14 +0000 2013", - favourites_count: 0, - utc_offset: 32400, - time_zone: "Irkutsk", - geo_enabled: false, - verified: false, - statuses_count: 17210, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/3460466135/c67d9df9b760787b9ed284fe80b1dd31_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/3460466135/c67d9df9b760787b9ed284fe80b1dd31_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1319883571/1364804982", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/4hbyB1rbQ7", - expanded_url: "http://ift.tt/1kT55bk", - display_url: "ift.tt/1kT55bk", - indices: [ - 116, - 138 - ] - } - ], - user_mentions: [] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:58 +0000 2014", - id: 505874852754907136, - id_str: "505874852754907136", - text: "RT @siranuga_hotoke: ゴキブリは一世帯に平均して480匹いる。", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 413944345, - id_str: "413944345", - name: "泥酔イナバウアー", - screen_name: "Natade_co_co_21", - location: "", - description: "君の瞳にうつる僕に乾杯。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 298, - friends_count: 300, - listed_count: 4, - created_at: "Wed Nov 16 12:52:46 +0000 2011", - favourites_count: 3125, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 12237, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "FFF04D", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/378800000115928444/9bf5fa13385cc80bfeb097e51af9862a.jpeg", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/378800000115928444/9bf5fa13385cc80bfeb097e51af9862a.jpeg", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/500849752351600640/lMQqIzYj_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/500849752351600640/lMQqIzYj_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/413944345/1403511193", - profile_link_color: "0099CC", - profile_sidebar_border_color: "000000", - profile_sidebar_fill_color: "F6FFD1", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sat Aug 30 23:24:23 +0000 2014", - id: 505858599411666944, - id_str: "505858599411666944", - text: "ゴキブリは一世帯に平均して480匹いる。", - source: "twittbot.net", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2243896200, - id_str: "2243896200", - name: "知らぬが仏bot", - screen_name: "siranuga_hotoke", - location: "奈良・京都辺り", - description: "知らぬが仏な情報をお伝えします。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 3288, - friends_count: 3482, - listed_count: 7, - created_at: "Fri Dec 13 13:16:35 +0000 2013", - favourites_count: 0, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 1570, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/378800000866399372/ypy5NnPe_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/378800000866399372/ypy5NnPe_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/2243896200/1386997755", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 1, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - retweet_count: 1, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [], - user_mentions: [ - { - screen_name: "siranuga_hotoke", - name: "知らぬが仏bot", - id: 2243896200, - id_str: "2243896200", - indices: [ - 3, - 19 - ] - } - ] - }, - favorited: false, - retweeted: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:58 +0000 2014", - id: 505874852603908096, - id_str: "505874852603908096", - text: "RT @UARROW_Y: ようかい体操第一を踊る国見英 http://t.co/SXoYWH98as", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 2463035136, - id_str: "2463035136", - name: "や", - screen_name: "yae45", - location: "", - description: "きもちわるいことつぶやく用", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 4, - friends_count: 30, - listed_count: 0, - created_at: "Fri Apr 25 10:49:20 +0000 2014", - favourites_count: 827, - utc_offset: 32400, - time_zone: "Irkutsk", - geo_enabled: false, - verified: false, - statuses_count: 390, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/505345820137234433/csFeRxPm_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/505345820137234433/csFeRxPm_normal.jpeg", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:16:45 +0000 2014", - id: 505871779949051904, - id_str: "505871779949051904", - text: "ようかい体操第一を踊る国見英 http://t.co/SXoYWH98as", - source: "Twitter for Android", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1261662588, - id_str: "1261662588", - name: "ゆう矢", - screen_name: "UARROW_Y", - location: "つくり出そう国影の波 広げよう国影の輪", - description: "HQ!! 成人済腐女子。日常ツイート多いです。赤葦京治夢豚クソツイ含みます注意。フォローをお考えの際はプロフご一読お願い致します。FRBお気軽に", - url: "http://t.co/LFX2XOzb0l", - entities: { - url: { - urls: [ - { - url: "http://t.co/LFX2XOzb0l", - expanded_url: "http://twpf.jp/UARROW_Y", - display_url: "twpf.jp/UARROW_Y", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [] - } - }, - protected: false, - followers_count: 265, - friends_count: 124, - listed_count: 12, - created_at: "Tue Mar 12 10:42:17 +0000 2013", - favourites_count: 6762, - utc_offset: 32400, - time_zone: "Tokyo", - geo_enabled: true, - verified: false, - statuses_count: 55946, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/502095104618663937/IzuPYx3E_normal.png", - profile_image_url_https: "https://pbs.twimg.com/profile_images/502095104618663937/IzuPYx3E_normal.png", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1261662588/1408618604", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 29, - favorite_count: 54, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/SXoYWH98as", - expanded_url: "http://twitter.com/UARROW_Y/status/505871779949051904/photo/1", - display_url: "pic.twitter.com/SXoYWH98as", - indices: [ - 15, - 37 - ] - } - ], - user_mentions: [] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - retweet_count: 29, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/SXoYWH98as", - expanded_url: "http://twitter.com/UARROW_Y/status/505871779949051904/photo/1", - display_url: "pic.twitter.com/SXoYWH98as", - indices: [ - 29, - 51 - ] - } - ], - user_mentions: [ - { - screen_name: "UARROW_Y", - name: "ゆう矢", - id: 1261662588, - id_str: "1261662588", - indices: [ - 3, - 12 - ] - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "zh" - }, - created_at: "Sun Aug 31 00:28:57 +0000 2014", - id: 505874848900341760, - id_str: "505874848900341760", - text: "RT @fightcensorship: 李克強總理的臉綠了!在前日南京青奧會閉幕式,觀眾席上一名貪玩韓國少年運動員,竟斗膽用激光筆射向中國總理李克強的臉。http://t.co/HLX9mHcQwe http://t.co/fVVOSML5s8", - source: "Twitter for iPhone", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 889332218, - id_str: "889332218", - name: "民權初步", - screen_name: "JoeyYoungkm", - location: "km/cn", - description: "经历了怎样的曲折才从追求“一致通过”发展到今天人们接受“过半数通过”,正是人们认识到对“一致”甚至是“基本一致”的追求本身就会变成一种独裁。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 313, - friends_count: 46, - listed_count: 0, - created_at: "Thu Oct 18 17:21:17 +0000 2012", - favourites_count: 24, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 15707, - lang: "en", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "C0DEED", - profile_background_image_url: "http://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_image_url_https: "https://abs.twimg.com/images/themes/theme1/bg.png", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/378800000563062033/a7e8274752ce36a6cd5bad971ec7d416_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/378800000563062033/a7e8274752ce36a6cd5bad971ec7d416_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/889332218/1388896916", - profile_link_color: "0084B4", - profile_sidebar_border_color: "C0DEED", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: true, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweeted_status: { - metadata: { - result_type: "recent", - iso_language_code: "zh" - }, - created_at: "Sat Aug 30 23:56:27 +0000 2014", - id: 505866670356070400, - id_str: "505866670356070401", - text: "李克強總理的臉綠了!在前日南京青奧會閉幕式,觀眾席上一名貪玩韓國少年運動員,竟斗膽用激光筆射向中國總理李克強的臉。http://t.co/HLX9mHcQwe http://t.co/fVVOSML5s8", - source: "Twitter Web Client", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 67661086, - id_str: "67661086", - name: "※范强※法特姗瑟希蒲※", - screen_name: "fightcensorship", - location: "Middle of Nowhere", - description: "被人指责“封建”、“落后”、“保守”的代表,当代红卫兵攻击对象。致力于言论自由,人权; 倡导资讯公开,反对网络封锁。既不是精英分子,也不是意见领袖,本推言论不代表任何国家、党派和组织,也不标榜伟大、光荣和正确。", - url: 0, - entities: { - description: { - urls: [] - } - }, - protected: false, - followers_count: 7143, - friends_count: 779, - listed_count: 94, - created_at: "Fri Aug 21 17:16:22 +0000 2009", - favourites_count: 364, - utc_offset: 28800, - time_zone: "Singapore", - geo_enabled: false, - verified: false, - statuses_count: 16751, - lang: "en", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "FFFFFF", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/611138516/toeccqnahbpmr0sw9ybv.jpeg", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/611138516/toeccqnahbpmr0sw9ybv.jpeg", - profile_background_tile: true, - profile_image_url: "http://pbs.twimg.com/profile_images/3253137427/3524557d21ef2c04871e985d4d136bdb_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/3253137427/3524557d21ef2c04871e985d4d136bdb_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/67661086/1385608347", - profile_link_color: "ED1313", - profile_sidebar_border_color: "FFFFFF", - profile_sidebar_fill_color: "E0FF92", - profile_text_color: "000000", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 4, - favorite_count: 2, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/HLX9mHcQwe", - expanded_url: "http://is.gd/H3OgTO", - display_url: "is.gd/H3OgTO", - indices: [ - 57, - 79 - ] - } - ], - user_mentions: [], - media: [ - { - id: 505866668485386240, - id_str: "505866668485386241", - indices: [ - 80, - 102 - ], - media_url: "http://pbs.twimg.com/media/BwUzDgbIIAEgvhD.jpg", - media_url_https: "https://pbs.twimg.com/media/BwUzDgbIIAEgvhD.jpg", - url: "http://t.co/fVVOSML5s8", - display_url: "pic.twitter.com/fVVOSML5s8", - expanded_url: "http://twitter.com/fightcensorship/status/505866670356070401/photo/1", - type: "photo", - sizes: { - large: { - w: 640, - h: 554, - resize: "fit" - }, - medium: { - w: 600, - h: 519, - resize: "fit" - }, - thumb: { - w: 150, - h: 150, - resize: "crop" - }, - small: { - w: 340, - h: 294, - resize: "fit" - } - } - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "zh" - }, - retweet_count: 4, - favorite_count: 0, - entities: { - hashtags: [], - symbols: [], - urls: [ - { - url: "http://t.co/HLX9mHcQwe", - expanded_url: "http://is.gd/H3OgTO", - display_url: "is.gd/H3OgTO", - indices: [ - 78, - 100 - ] - } - ], - user_mentions: [ - { - screen_name: "fightcensorship", - name: "※范强※法特姗瑟希蒲※", - id: 67661086, - id_str: "67661086", - indices: [ - 3, - 19 - ] - } - ], - media: [ - { - id: 505866668485386240, - id_str: "505866668485386241", - indices: [ - 101, - 123 - ], - media_url: "http://pbs.twimg.com/media/BwUzDgbIIAEgvhD.jpg", - media_url_https: "https://pbs.twimg.com/media/BwUzDgbIIAEgvhD.jpg", - url: "http://t.co/fVVOSML5s8", - display_url: "pic.twitter.com/fVVOSML5s8", - expanded_url: "http://twitter.com/fightcensorship/status/505866670356070401/photo/1", - type: "photo", - sizes: { - large: { - w: 640, - h: 554, - resize: "fit" - }, - medium: { - w: 600, - h: 519, - resize: "fit" - }, - thumb: { - w: 150, - h: 150, - resize: "crop" - }, - small: { - w: 340, - h: 294, - resize: "fit" - } - }, - source_status_id: 505866670356070400, - source_status_id_str: "505866670356070401" - } - ] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "zh" - }, - { - metadata: { - result_type: "recent", - iso_language_code: "ja" - }, - created_at: "Sun Aug 31 00:28:56 +0000 2014", - id: 505874847260352512, - id_str: "505874847260352513", - text: "【マイリスト】【彩りりあ】妖怪体操第一 踊ってみた【反転】 http://t.co/PjL9if8OZC #sm24357625", - source: "ニコニコ動画", - truncated: false, - in_reply_to_status_id: 0, - in_reply_to_status_id_str: 0, - in_reply_to_user_id: 0, - in_reply_to_user_id_str: 0, - in_reply_to_screen_name: 0, - user: { - id: 1609789375, - id_str: "1609789375", - name: "食いしん坊前ちゃん", - screen_name: "2no38mae", - location: "ニノと二次元の間", - description: "ニコ動で踊り手やってます!!応援本当に嬉しいですありがとうございます!! ぽっちゃりだけど前向きに頑張る腐女子です。嵐と弱虫ペダルが大好き!【お返事】りぷ(基本は)”○” DM (同業者様を除いて)”×” 動画の転載は絶対にやめてください。 ブログ→http://t.co/8E91tqoeKX  ", - url: "http://t.co/ulD2e9mcwb", - entities: { - url: { - urls: [ - { - url: "http://t.co/ulD2e9mcwb", - expanded_url: "http://www.nicovideo.jp/mylist/37917495", - display_url: "nicovideo.jp/mylist/37917495", - indices: [ - 0, - 22 - ] - } - ] - }, - description: { - urls: [ - { - url: "http://t.co/8E91tqoeKX", - expanded_url: "http://ameblo.jp/2no38mae/", - display_url: "ameblo.jp/2no38mae/", - indices: [ - 125, - 147 - ] - } - ] - } - }, - protected: false, - followers_count: 560, - friends_count: 875, - listed_count: 11, - created_at: "Sun Jul 21 05:09:43 +0000 2013", - favourites_count: 323, - utc_offset: 0, - time_zone: 0, - geo_enabled: false, - verified: false, - statuses_count: 3759, - lang: "ja", - contributors_enabled: false, - is_translator: false, - is_translation_enabled: false, - profile_background_color: "F2C6E4", - profile_background_image_url: "http://pbs.twimg.com/profile_background_images/378800000029400927/114b242f5d838ec7cb098ea5db6df413.jpeg", - profile_background_image_url_https: "https://pbs.twimg.com/profile_background_images/378800000029400927/114b242f5d838ec7cb098ea5db6df413.jpeg", - profile_background_tile: false, - profile_image_url: "http://pbs.twimg.com/profile_images/487853237723095041/LMBMGvOc_normal.jpeg", - profile_image_url_https: "https://pbs.twimg.com/profile_images/487853237723095041/LMBMGvOc_normal.jpeg", - profile_banner_url: "https://pbs.twimg.com/profile_banners/1609789375/1375752225", - profile_link_color: "FF9EDD", - profile_sidebar_border_color: "FFFFFF", - profile_sidebar_fill_color: "DDEEF6", - profile_text_color: "333333", - profile_use_background_image: true, - default_profile: false, - default_profile_image: false, - following: false, - follow_request_sent: false, - notifications: false - }, - geo: 0, - coordinates: 0, - place: 0, - contributors: 0, - retweet_count: 0, - favorite_count: 0, - entities: { - hashtags: [ - { - text: "sm24357625", - indices: [ - 53, - 64 - ] - } - ], - symbols: [], - urls: [ - { - url: "http://t.co/PjL9if8OZC", - expanded_url: "http://nico.ms/sm24357625", - display_url: "nico.ms/sm24357625", - indices: [ - 30, - 52 - ] - } - ], - user_mentions: [] - }, - favorited: false, - retweeted: false, - possibly_sensitive: false, - lang: "ja" - } - ], - search_metadata: { - completed_in: 0.087, - max_id: 505874924095815680, - max_id_str: "505874924095815681", - next_results: "?max_id=505874847260352512&q=%E4%B8%80&count=100&include_entities=1", - query: "%E4%B8%80", - refresh_url: "?since_id=505874924095815681&q=%E4%B8%80&include_entities=1", - count: 100, - since_id: 0, - since_id_str: "0" - } -}