diff --git a/app/build.gradle b/app/build.gradle index bec5a90..443266d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,6 +20,7 @@ android { versionCode project.versionCode versionName project.versionName multiDexEnabled true + testInstrumentationRunner "com.task.CustomTestRunner" } buildTypes { debug { @@ -32,6 +33,16 @@ android { } } + flavorDimensions "default" + productFlavors { + mock { + dimension = 'default' + applicationIdSuffix = ".mock" + } + prod { + dimension = 'default' + } + } compileOptions { targetCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8 @@ -39,7 +50,6 @@ android { productFlavors { } defaultConfig { - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments clearPackageData: 'true' } kotlinOptions { @@ -78,7 +88,7 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2' testImplementation 'org.junit.platform:junit-platform-runner:1.5.2' androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation "org.assertj:assertj-core:3.12.2" + androidTestImplementation "org.assertj:assertj-core:3.14.0" androidTestImplementation "androidx.arch.core:core-testing:2.1.0" androidTestImplementation ('androidx.test.espresso:espresso-core:3.2.0',{ exclude group: 'com.android.support', module: 'support-annotations' @@ -87,7 +97,7 @@ dependencies { implementation 'androidx.test.espresso:espresso-idling-resource:3.2.0' implementation 'androidx.test.espresso:espresso-contrib:3.2.0' implementation 'androidx.arch.core:core-testing:2.1.0' - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.2.1' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.2' /**-------------------------------------------------------------**/ @@ -103,13 +113,14 @@ dependencies { implementation "com.google.dagger:dagger-android:2.22.1" implementation "com.google.dagger:dagger-android-support:2.22.1" kapt 'com.google.dagger:dagger-android-processor:2.22.1' + kaptAndroidTest "com.google.dagger:dagger-compiler:2.25.2" //Logging implementation 'com.squareup.okhttp3:logging-interceptor:4.2.2' // retrofit - implementation 'com.squareup.retrofit2:retrofit:2.6.2' - implementation 'com.squareup.retrofit2:converter-gson:2.6.2' + implementation 'com.squareup.retrofit2:retrofit:2.7.0' + implementation 'com.squareup.retrofit2:converter-gson:2.7.0' implementation 'com.squareup.okhttp3:okhttp:4.2.2' //picasso diff --git a/app/gradle/wrapper/gradle-wrapper.jar b/app/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..f6b961f Binary files /dev/null and b/app/gradle/wrapper/gradle-wrapper.jar differ diff --git a/app/gradle/wrapper/gradle-wrapper.properties b/app/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..a36ee46 --- /dev/null +++ b/app/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Dec 19 18:35:36 CET 2019 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/app/gradlew b/app/gradlew new file mode 100644 index 0000000..cccdd3d --- /dev/null +++ b/app/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/app/gradlew.bat b/app/gradlew.bat new file mode 100644 index 0000000..e95643d --- /dev/null +++ b/app/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/app/src/androidTest/java/com/task/AppTest.kt b/app/src/androidTest/java/com/task/AppTest.kt new file mode 100644 index 0000000..3725052 --- /dev/null +++ b/app/src/androidTest/java/com/task/AppTest.kt @@ -0,0 +1,8 @@ +package com.task +import com.task.di.DaggerTestAppComponent + +class AppTest: App() { + override fun initDagger() { + DaggerTestAppComponent.builder().application(this).build().inject(this) + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/task/CustomTestRunner.kt b/app/src/androidTest/java/com/task/CustomTestRunner.kt new file mode 100644 index 0000000..2442e03 --- /dev/null +++ b/app/src/androidTest/java/com/task/CustomTestRunner.kt @@ -0,0 +1,16 @@ +package com.task + +import android.app.Application +import android.content.Context +import androidx.test.runner.AndroidJUnitRunner + +/** + * A custom [AndroidJUnitRunner] used to replace the application used in tests with a + * [CustomTestRunner]. + */ +class CustomTestRunner : AndroidJUnitRunner() { + + override fun newApplication(cl: ClassLoader?, name: String?, context: Context?): Application { + return super.newApplication(cl, AppTest::class.java.name, context) + } +} diff --git a/app/src/androidTest/java/com/task/TestDataReprository.kt b/app/src/androidTest/java/com/task/TestDataReprository.kt new file mode 100644 index 0000000..00be95f --- /dev/null +++ b/app/src/androidTest/java/com/task/TestDataReprository.kt @@ -0,0 +1,57 @@ +package com.task + +import android.content.Context +import androidx.test.platform.app.InstrumentationRegistry +import com.google.gson.Gson +import com.task.TestDataReprository.Instance.initData +import com.task.data.DataSource +import com.task.data.remote.Data +import com.task.data.remote.Error +import com.task.data.remote.dto.NewsModel +import java.io.InputStream +import javax.inject.Inject + + +/** + * Created by ahmedEltaher on 3/8/17. + */ + +class TestDataReprository @Inject constructor() : DataSource { + + override fun requestNews(): Data? { + return initData() + } + + object Instance { + var STATUS = DATA_STATUS.FULL_LIST + fun initData(): Data { + val gson = Gson() + val jsonString = getJson("NewsApiResponse.json") + var mokedResponse = gson.fromJson(jsonString, NewsModel::class.java) + return when (STATUS) { + DATA_STATUS.EMPTY_LIST -> { + mokedResponse.newsItems = emptyList() + Data(code = 200, error = null, data = mokedResponse) + } + DATA_STATUS.FULL_LIST -> { + Data(code = 200, error = null, data = mokedResponse) + } + DATA_STATUS.NO_DATA -> { + Data(code = 500, error = Error(description = "No data retrieved from server side", code = 500), data = null) + } + DATA_STATUS.NO_INTERNET -> { + Data(code = -1, error = Error(description = "No internet Connections", code = -1), data = null) + } + } + + } + + private fun getJson(path: String): String { + val ctx: Context = InstrumentationRegistry.getInstrumentation().targetContext + val inputStream: InputStream = ctx.assets.open(path) + return inputStream.bufferedReader().use { it.readText() } + } + } +} + +enum class DATA_STATUS { EMPTY_LIST, FULL_LIST, NO_DATA, NO_INTERNET } diff --git a/app/src/androidTest/java/com/task/di/TestAppComponent.kt b/app/src/androidTest/java/com/task/di/TestAppComponent.kt new file mode 100644 index 0000000..e0baefb --- /dev/null +++ b/app/src/androidTest/java/com/task/di/TestAppComponent.kt @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.task.di + +import android.app.Application +import com.task.AppTest +import dagger.BindsInstance +import dagger.Component +import dagger.android.AndroidInjectionModule +import javax.inject.Singleton + +@Singleton +@Component( + modules = [TestDataModule::class, + AndroidInjectionModule::class, + AppModule::class, + ActivityModuleBuilder::class + , ViewModelModule::class]) +interface TestAppComponent : AppComponent { + @Component.Builder + interface Builder { + @BindsInstance + fun application(application: Application): Builder + + fun build(): TestAppComponent + } + + fun inject(app: AppTest) +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/task/di/TestDataModule.kt b/app/src/androidTest/java/com/task/di/TestDataModule.kt new file mode 100644 index 0000000..f0ff730 --- /dev/null +++ b/app/src/androidTest/java/com/task/di/TestDataModule.kt @@ -0,0 +1,14 @@ +package com.task.di + +import com.task.TestDataReprository +import com.task.data.DataSource +import dagger.Binds +import dagger.Module +import javax.inject.Singleton + +@Module +abstract class TestDataModule { + @Binds + @Singleton + abstract fun provideDataRepository(dataRepository: TestDataReprository): DataSource +} \ No newline at end of file diff --git a/app/src/main/java/com/task/App.kt b/app/src/main/java/com/task/App.kt index 0b3e582..725be8b 100644 --- a/app/src/main/java/com/task/App.kt +++ b/app/src/main/java/com/task/App.kt @@ -12,7 +12,7 @@ import javax.inject.Inject * Created by AhmedEltaher on 5/12/2016 */ -class App : MultiDexApplication(), HasActivityInjector { +open class App : MultiDexApplication(), HasActivityInjector { @Inject lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector @@ -20,6 +20,10 @@ class App : MultiDexApplication(), HasActivityInjector { override fun onCreate() { super.onCreate() context = applicationContext + initDagger() + } + + open fun initDagger() { DaggerAppComponent.builder().application(this).build().inject(this) } diff --git a/app/src/main/java/com/task/data/DataSource.kt b/app/src/main/java/com/task/data/DataSource.kt index 41ffd4c..063f3c2 100644 --- a/app/src/main/java/com/task/data/DataSource.kt +++ b/app/src/main/java/com/task/data/DataSource.kt @@ -6,6 +6,6 @@ import com.task.data.remote.Data * Created by ahmedeltaher on 3/23/17. */ -internal interface DataSource { +interface DataSource { fun requestNews(): Data? } diff --git a/app/src/main/java/com/task/data/remote/Error.kt b/app/src/main/java/com/task/data/remote/Error.kt index c4bf7ef..c1e1e72 100644 --- a/app/src/main/java/com/task/data/remote/Error.kt +++ b/app/src/main/java/com/task/data/remote/Error.kt @@ -25,8 +25,8 @@ class Error { private const val GROUP_200 = 2 private const val GROUP_400 = 4 private const val GROUP_500 = 5 - private const val INTERNAL_SERVER_ERROR = 500 - private const val NO_INTERNET_CONNECTION = -1 + const val INTERNAL_SERVER_ERROR = 500 + const val NO_INTERNET_CONNECTION = -1 private const val VALUE_100 = 100 const val SUCCESS_CODE = 200 const val ERROR_CODE = 400 diff --git a/app/src/main/java/com/task/data/remote/dto/Multimedia.kt b/app/src/main/java/com/task/data/remote/dto/Multimedia.kt old mode 100755 new mode 100644 index fc4d936..e73cae5 --- a/app/src/main/java/com/task/data/remote/dto/Multimedia.kt +++ b/app/src/main/java/com/task/data/remote/dto/Multimedia.kt @@ -1,30 +1,16 @@ package com.task.data.remote.dto import android.os.Parcelable -import com.google.gson.annotations.SerializedName import kotlinx.android.parcel.Parcelize -/** - * we define all the variables as @var, because it might happen that backend send some values as - * null - */ -/** - *@Parcelize is from kotlin experimental but it is stable, and we use it for Parcelable - * impersonation - */ -/** - * you can convert your json to kotlin data class in easy simple way, by using - * @(JSON To Kotlin Class) plugin in android studio, you can install the plugin as any other - * plugin and then use it, for more details check here: - * https://plugins.jetbrains.com/plugin/9960-json-to-kotlin-class-jsontokotlinclass- - */ @Parcelize -data class Multimedia(@SerializedName("url") var url: String? = null, - @SerializedName("format") var format: String? = null, - @SerializedName("height") var height: Long? = null, - @SerializedName("width") var width: Long? = null, - @SerializedName("type") var type: String? = null, - @SerializedName("subtype") var subtype: String? = null, - @SerializedName("caption") var caption: String? = null, - @SerializedName("copyright") var copyright: String? = null) : Parcelable - +data class Multimedia( + var caption: String = "", + var copyright: String = "", + var format: String = "", + var height: Int = 0, + var subtype: String = "", + var type: String = "", + var url: String = "", + var width: Int = 0 +):Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/task/data/remote/dto/NewsItem.kt b/app/src/main/java/com/task/data/remote/dto/NewsItem.kt old mode 100755 new mode 100644 index 00cc569..f79d76f --- a/app/src/main/java/com/task/data/remote/dto/NewsItem.kt +++ b/app/src/main/java/com/task/data/remote/dto/NewsItem.kt @@ -1,38 +1,39 @@ package com.task.data.remote.dto + import android.os.Parcelable import com.google.gson.annotations.SerializedName import kotlinx.android.parcel.Parcelize -/** - * we define all the variables as @var, because it might happen that backend send some values as - * null - */ -/** - *@Parcelize is from kotlin experimental but it is stable, and we use it for Parcelable - * impersonation - */ -/** - * you can convert your json to kotlin data class in easy simple way, by using - * @(JSON To Kotlin Class) plugin in android studio, you can install the plugin as any other - * plugin and then use it, for more details check here: - * https://plugins.jetbrains.com/plugin/9960-json-to-kotlin-class-jsontokotlinclass- - */ + @Parcelize -data class NewsItem(@SerializedName("section") var section: String? = null, - @SerializedName("subsection") var subsection: String? = null, - @SerializedName("title") var title: String? = null, - @SerializedName("abstract") var abstract: String? = null, - @SerializedName("url") var url: String? = null, - @SerializedName("byline") var byline: String? = null, - @SerializedName("item_type") var itemType: String? = null, - @SerializedName("updated_date") var updatedDate: String? = null, - @SerializedName("created_date") var createdDate: String? = null, - @SerializedName("published_date") var publishedDate: String? = null, - @SerializedName("material_type_facet") var materialTypeFacet: String? = null, - @SerializedName("kicker") var kicker: String? = null, - @SerializedName("des_facet") var desFacet: List? = null, - @SerializedName("org_facet") var orgFacet: List? = null, - @SerializedName("per_facet") var perFacet: List? = null, - @SerializedName("geo_facet") var geoFacet: List? = null, - @SerializedName("multimedia") var multimedia: List? = null, - @SerializedName("short_url") var shortUrl: String? = null) : Parcelable +data class NewsItem( + @SerializedName("abstract") + var abstractInfo: String = "", + var byline: String = "", + @SerializedName("created_date") + var createdDate: String = "", + @SerializedName("des_facet") + var desFacet: List = listOf(), + @SerializedName("geo_facet") + var geoFacet: List = listOf(), + @SerializedName("item_type") + var itemType: String = "", + var kicker: String = "", + @SerializedName("material_type_facet") + var materialTypeFacet: String = "", + var multimedia: List = listOf(), + @SerializedName("org_facet") + var orgFacet: List = listOf(), + @SerializedName("per_facet") + var perFacet: List = listOf(), + @SerializedName("published_date") + var publishedDate: String = "", + var section: String = "", + @SerializedName("short_url") + var shortUrl: String = "", + var subsection: String = "", + var title: String = "", + @SerializedName("updated_date") + var updatedDate: String = "", + var url: String = "" +) : Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/task/data/remote/dto/NewsModel.kt b/app/src/main/java/com/task/data/remote/dto/NewsModel.kt old mode 100755 new mode 100644 index 4e58fd3..184e568 --- a/app/src/main/java/com/task/data/remote/dto/NewsModel.kt +++ b/app/src/main/java/com/task/data/remote/dto/NewsModel.kt @@ -1,20 +1,16 @@ package com.task.data.remote.dto + import com.google.gson.annotations.SerializedName -/** - * we define all the variables as @var, because it might happen that backend send some values as - * null - */ -/** - * you can convert your json to kotlin data class in easy simple way, by using - * @(JSON To Kotlin Class) plugin in android studio, you can install the plugin as any other - * plugin and then use it, for more details check here: - * https://plugins.jetbrains.com/plugin/9960-json-to-kotlin-class-jsontokotlinclass- - */ -data class NewsModel(@SerializedName("status") var status: String? = null, - @SerializedName("copyright") var copyright: String? = null, - @SerializedName("section") var section: String? = null, - @SerializedName("last_updated") var lastUpdated: String? = null, - @SerializedName("num_results") var numResults: Long? = null, - @SerializedName("results") var newsItems: List? = null) +data class NewsModel( + var copyright: String = "", + @SerializedName("last_updated") + var lastUpdated: String = "", + @SerializedName("num_results") + var numResults: Int = 0, + @SerializedName("results") + var newsItems: List = listOf(), + var section: String = "", + var status: String = "" +) \ No newline at end of file diff --git a/app/src/main/java/com/task/di/AppComponent.kt b/app/src/main/java/com/task/di/AppComponent.kt index 7839ffd..c55d315 100644 --- a/app/src/main/java/com/task/di/AppComponent.kt +++ b/app/src/main/java/com/task/di/AppComponent.kt @@ -15,6 +15,7 @@ */ package com.task.di + import android.app.Application import com.task.App import dagger.BindsInstance @@ -27,6 +28,7 @@ import javax.inject.Singleton modules = [ AndroidInjectionModule::class, AppModule::class, + DataModule::class, ActivityModuleBuilder::class , ViewModelModule::class ] @@ -39,5 +41,6 @@ interface AppComponent { fun build(): AppComponent } + fun inject(app: App) } diff --git a/app/src/main/java/com/task/di/DataModule.kt b/app/src/main/java/com/task/di/DataModule.kt new file mode 100644 index 0000000..5dfd41d --- /dev/null +++ b/app/src/main/java/com/task/di/DataModule.kt @@ -0,0 +1,16 @@ + +package com.task.di + +import com.task.data.DataRepository +import com.task.data.DataSource +import dagger.Binds +import dagger.Module +import javax.inject.Singleton + +// Tells Dagger this is a Dagger module +@Module +abstract class DataModule { + @Binds + @Singleton + abstract fun provideDataRepository(dataRepository: DataRepository): DataSource +} diff --git a/app/src/main/java/com/task/ui/base/listeners/BaseCallback.kt b/app/src/main/java/com/task/ui/base/listeners/BaseCallback.kt index 84898bf..1cd4942 100644 --- a/app/src/main/java/com/task/ui/base/listeners/BaseCallback.kt +++ b/app/src/main/java/com/task/ui/base/listeners/BaseCallback.kt @@ -1,14 +1,13 @@ package com.task.ui.base.listeners import com.task.data.remote.Error -import com.task.data.remote.dto.NewsModel /** * Created by ahmedeltaher on 3/22/17. */ interface BaseCallback { - fun onSuccess(data: NewsModel) + fun onSuccess(data: Any) - fun onFail(error : Error?) + fun onFail(error : Error) } diff --git a/app/src/main/java/com/task/ui/component/details/DetailsActivity.kt b/app/src/main/java/com/task/ui/component/details/DetailsActivity.kt index 0aed62f..bdec2d5 100644 --- a/app/src/main/java/com/task/ui/component/details/DetailsActivity.kt +++ b/app/src/main/java/com/task/ui/component/details/DetailsActivity.kt @@ -42,10 +42,10 @@ class DetailsActivity : BaseActivity(){ } private fun initializeView(newsItem: NewsItem) { - tv_title?.text = newsItem.title ?: "" - tv_description?.text = newsItem.abstract ?: "" + tv_title?.text = newsItem.title + tv_description?.text = newsItem.abstractInfo if (!newsItem.multimedia.isNullOrEmpty()) { - Picasso.get().load(newsItem.multimedia!!.last().url).placeholder(R.drawable.news) + Picasso.get().load(newsItem.multimedia.last().url).placeholder(R.drawable.news) .into(iv_news_main_Image) } } diff --git a/app/src/main/java/com/task/ui/component/news/NewsListViewModel.kt b/app/src/main/java/com/task/ui/component/news/NewsListViewModel.kt index aa1a382..9edfd65 100644 --- a/app/src/main/java/com/task/ui/component/news/NewsListViewModel.kt +++ b/app/src/main/java/com/task/ui/component/news/NewsListViewModel.kt @@ -29,12 +29,12 @@ constructor(newsDataUseCase: NewsUseCase) : BaseViewModel() { private val callback = object : BaseCallback { - override fun onSuccess(data: NewsModel) { - newsModel.postValue(data) + override fun onSuccess(data: Any) { + newsModel.postValue(data as NewsModel) } - override fun onFail(error: Error?) { - if (error?.code == -1) { + override fun onFail(error: Error) { + if (error.code == Error.NO_INTERNET_CONNECTION) { noInterNetConnection.postValue(true) } else { showError.postValue(error) @@ -43,7 +43,7 @@ constructor(newsDataUseCase: NewsUseCase) : BaseViewModel() { } } - fun onSearchClick(newsTitle: String) { + fun onSearchClick(newsTitle: String) { val news = newsModel.value?.newsItems if (newsTitle.isNotEmpty() && !news.isNullOrEmpty()) { newsSearchFound.value = newsUseCase.searchByTitle(news, newsTitle) @@ -52,4 +52,9 @@ constructor(newsDataUseCase: NewsUseCase) : BaseViewModel() { noSearchFound.value = true } } + + override fun onCleared() { + super.onCleared() + + } } diff --git a/app/src/main/java/com/task/ui/component/news/newsAdapter/NewsViewHolder.kt b/app/src/main/java/com/task/ui/component/news/newsAdapter/NewsViewHolder.kt index 4e8d1f0..149215d 100644 --- a/app/src/main/java/com/task/ui/component/news/newsAdapter/NewsViewHolder.kt +++ b/app/src/main/java/com/task/ui/component/news/newsAdapter/NewsViewHolder.kt @@ -16,11 +16,11 @@ import kotlinx.android.synthetic.main.news_item.* class NewsViewHolder(override val containerView: View) : RecyclerView.ViewHolder(containerView), LayoutContainer { fun bind(position: Int, newsItem: NewsItem, recyclerItemListener: RecyclerItemListener) { - tv_caption.text = newsItem.abstract ?: "" - tv_title.text = newsItem.title ?: "" + tv_caption.text = newsItem.abstractInfo + tv_title.text = newsItem.title - if (!newsItem.multimedia.isNullOrEmpty() && newsItem.multimedia!!.size > 3) { - val url: String? = newsItem.multimedia!![3].url + if (newsItem.multimedia.size > 3) { + val url: String? = newsItem.multimedia[3].url Picasso.get().load(url).placeholder(R.drawable.news).error(R.drawable.news).into(iv_news_item_image) } rl_news_item.setOnClickListener { recyclerItemListener.onItemSelected(position) } diff --git a/app/src/main/java/com/task/usecase/NewsUseCase.kt b/app/src/main/java/com/task/usecase/NewsUseCase.kt index 843b922..b7afbf1 100644 --- a/app/src/main/java/com/task/usecase/NewsUseCase.kt +++ b/app/src/main/java/com/task/usecase/NewsUseCase.kt @@ -1,8 +1,9 @@ package com.task.usecase -import com.task.data.DataRepository +import com.task.data.DataSource import com.task.data.remote.Data import com.task.data.remote.Error +import com.task.data.remote.Error.Companion.INTERNAL_SERVER_ERROR import com.task.data.remote.dto.NewsItem import com.task.data.remote.dto.NewsModel import com.task.ui.base.listeners.BaseCallback @@ -19,7 +20,7 @@ import kotlin.coroutines.CoroutineContext */ class NewsUseCase @Inject -constructor(private val dataRepository: DataRepository, override val coroutineContext: CoroutineContext) : UseCase, CoroutineScope { +constructor(private val dataRepository: DataSource, override val coroutineContext: CoroutineContext) : UseCase, CoroutineScope { override fun getNews(callback: BaseCallback) { launch { @@ -29,7 +30,7 @@ constructor(private val dataRepository: DataRepository, override val coroutineCo val data = serviceResponse.data callback.onSuccess(data as NewsModel) } else { - callback.onFail(serviceResponse?.error) + callback.onFail(serviceResponse?.error ?: Error(code = INTERNAL_SERVER_ERROR)) } } catch (e: Exception) { callback.onFail(Error(e)) @@ -39,7 +40,7 @@ constructor(private val dataRepository: DataRepository, override val coroutineCo override fun searchByTitle(news: List, keyWord: String): NewsItem? { for (newsItem in news) { - if (!newsItem.title.isNullOrEmpty() && newsItem.title!!.toLowerCase().contains(keyWord.toLowerCase())) { + if (newsItem.title.isNotEmpty() && newsItem.title.toLowerCase().contains(keyWord.toLowerCase())) { return newsItem } } diff --git a/app/src/mock/assets/NewsApiResponse.json b/app/src/mock/assets/NewsApiResponse.json new file mode 100644 index 0000000..e1b2265 --- /dev/null +++ b/app/src/mock/assets/NewsApiResponse.json @@ -0,0 +1,2790 @@ +{ + "status": "OK", + "copyright": "Copyright (c) 2019 The New York Times Company. All Rights Reserved.", + "section": "home", + "last_updated": "2019-12-19T12:47:13-05:00", + "num_results": 35, + "results": [ + { + "section": "U.S.", + "subsection": "Politics", + "title": "Trump Impeached for Abuse of Power and Obstruction of Congress", + "abstract": "Voting nearly along party lines, the House approved two articles of impeachment against President Trump, making him the third president in history to face removal by the Senate.", + "url": "https://www.nytimes.com/2019/12/18/us/politics/trump-impeached.html", + "byline": "By NICHOLAS FANDOS and MICHAEL D. SHEAR", + "item_type": "Article", + "updated_date": "2019-12-19T10:45:06-05:00", + "created_date": "2019-12-18T13:50:38-05:00", + "published_date": "2019-12-18T13:50:38-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Impeachment", + "United States Politics and Government", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "Presidential Election of 2020", + "Russian Interference in 2016 US Elections and Ties to Trump Associates" + ], + "org_facet": [ + "House of Representatives", + "Democratic Party", + "Republican Party" + ], + "per_facet": [ + "Trump, Donald J", + "Pelosi, Nancy" + ], + "geo_facet": [], + "multimedia": [], + "short_url": "https://nyti.ms/34vl8TX" + }, + { + "section": "U.S.", + "subsection": "Politics", + "title": "Trump Impeachment Trial in Doubt as a House Leader Suggests Withholding Articles", + "abstract": "The comments by Representative James E. Clyburn, the No. 3 Democratic leader, cast further uncertainty on the path forward for a Senate trial of President Trump.", + "url": "https://www.nytimes.com/2019/12/19/us/politics/impeachment-trump-senate-trial.html", + "byline": "By NICHOLAS FANDOS and SHERYL GAY STOLBERG", + "item_type": "Article", + "updated_date": "2019-12-19T11:11:59-05:00", + "created_date": "2019-12-19T09:56:06-05:00", + "published_date": "2019-12-19T09:56:06-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry" + ], + "org_facet": [ + "Senate", + "House of Representatives" + ], + "per_facet": [ + "Clyburn, James E", + "McConnell, Mitch", + "Trump, Donald J", + "Pelosi, Nancy" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19dc-impeach/19dc-impeach-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Representative James Clyburn, Democrat of South Carolina, giving a television interview on Wednesday ahead of the House votes on articles of impeachment on Capitol Hill.", + "copyright": "Jason Andrew for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19dc-impeach/19dc-impeach-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Representative James Clyburn, Democrat of South Carolina, giving a television interview on Wednesday ahead of the House votes on articles of impeachment on Capitol Hill.", + "copyright": "Jason Andrew for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19dc-impeach/merlin_166138962_66a5ba8d-aaf7-4d25-bd01-8edd845ef6e4-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Representative James Clyburn, Democrat of South Carolina, giving a television interview on Wednesday ahead of the House votes on articles of impeachment on Capitol Hill.", + "copyright": "Jason Andrew for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19dc-impeach/merlin_166138962_66a5ba8d-aaf7-4d25-bd01-8edd845ef6e4-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Representative James Clyburn, Democrat of South Carolina, giving a television interview on Wednesday ahead of the House votes on articles of impeachment on Capitol Hill.", + "copyright": "Jason Andrew for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19dc-impeach/merlin_166138962_66a5ba8d-aaf7-4d25-bd01-8edd845ef6e4-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Representative James Clyburn, Democrat of South Carolina, giving a television interview on Wednesday ahead of the House votes on articles of impeachment on Capitol Hill.", + "copyright": "Jason Andrew for The New York Times" + } + ], + "short_url": "https://nyti.ms/34CU1GL" + }, + { + "section": "U.S.", + "subsection": "Politics", + "title": "A President Impeached, and a Nation Convulsed", + "abstract": "The impeachment battles over Andrew Johnson, Richard M. Nixon and Bill Clinton came at turning points in the American story. The time that produced President Trump has proved to be another one.", + "url": "https://www.nytimes.com/2019/12/18/us/politics/president-impeachment-history.html", + "byline": "By PETER BAKER", + "item_type": "Article", + "updated_date": "2019-12-19T10:48:24-05:00", + "created_date": "2019-12-18T22:14:47-05:00", + "published_date": "2019-12-18T22:14:47-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Impeachment", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "United States Politics and Government" + ], + "org_facet": [ + "House of Representatives", + "Democratic Party", + "Republican Party" + ], + "per_facet": [ + "Trump, Donald J", + "Johnson, Andrew", + "Nixon, Richard Milhous", + "Clinton, Bill" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-history1/merlin_166132113_48356d46-51a5-4d2a-af9e-bce836ba7940-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Linda Emerick with a copy of the Constitution during a demonstration in support of impeaching President Trump on Wednesday outside the Capitol.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-history1/merlin_166132113_48356d46-51a5-4d2a-af9e-bce836ba7940-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Linda Emerick with a copy of the Constitution during a demonstration in support of impeaching President Trump on Wednesday outside the Capitol.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-history1/merlin_166132113_48356d46-51a5-4d2a-af9e-bce836ba7940-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Linda Emerick with a copy of the Constitution during a demonstration in support of impeaching President Trump on Wednesday outside the Capitol.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-history1/merlin_166132113_48356d46-51a5-4d2a-af9e-bce836ba7940-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Linda Emerick with a copy of the Constitution during a demonstration in support of impeaching President Trump on Wednesday outside the Capitol.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-history1/merlin_166132113_48356d46-51a5-4d2a-af9e-bce836ba7940-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Linda Emerick with a copy of the Constitution during a demonstration in support of impeaching President Trump on Wednesday outside the Capitol.", + "copyright": "Alyssa Schukar for The New York Times" + } + ], + "short_url": "https://nyti.ms/36ZTTCX" + }, + { + "section": "U.S.", + "subsection": "Politics", + "title": "Trump, Unbowed, Uses Rally to Strike Back Against Impeachment Vote", + "abstract": "The president traveled to Michigan, a vital electoral state, to deliver his response after he became the third president to be impeached by the House.", + "url": "https://www.nytimes.com/2019/12/18/us/politics/Debbie-Dingell-husband.html", + "byline": "By MICHAEL CROWLEY, ANNIE KARNI and MAGGIE HABERMAN", + "item_type": "Article", + "updated_date": "2019-12-19T11:32:05-05:00", + "created_date": "2019-12-18T20:23:25-05:00", + "published_date": "2019-12-18T20:23:25-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry" + ], + "org_facet": [ + "House of Representatives", + "Republican Party" + ], + "per_facet": [ + "Trump, Donald J", + "Pence, Mike" + ], + "geo_facet": [ + "Michigan" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-trump-2/18dc-trump-2-thumbStandard-v4.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Supporters of Mr. Trump at the rally in Battle Creek, Mich.", + "copyright": "Pete Marovich for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-trump-2/18dc-trump-2-thumbLarge-v4.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Supporters of Mr. Trump at the rally in Battle Creek, Mich.", + "copyright": "Pete Marovich for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-trump-2/18dc-trump-2-articleInline-v4.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Supporters of Mr. Trump at the rally in Battle Creek, Mich.", + "copyright": "Pete Marovich for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-trump-2/18dc-trump-2-mediumThreeByTwo210-v4.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Supporters of Mr. Trump at the rally in Battle Creek, Mich.", + "copyright": "Pete Marovich for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-trump-2/18dc-trump-2-superJumbo-v4.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Supporters of Mr. Trump at the rally in Battle Creek, Mich.", + "copyright": "Pete Marovich for The New York Times" + } + ], + "short_url": "https://nyti.ms/2M9jy3X" + }, + { + "section": "Business", + "subsection": "Media", + "title": "How TV Covered the Moment of Impeachment", + "abstract": "Tucker Carlson was grim. Sean Hannity was angry. Two networks seemed reluctant to leave their scheduled prime-time shows.", + "url": "https://www.nytimes.com/2019/12/18/business/media/cnn-msnbc-fox-news-trump-impeachment.html", + "byline": "By JIM WINDOLF", + "item_type": "Article", + "updated_date": "2019-12-18T21:49:25-05:00", + "created_date": "2019-12-18T21:49:26-05:00", + "published_date": "2019-12-18T21:49:26-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "News and News Media", + "Television", + "Impeachment", + "Survivor (TV Program)", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry" + ], + "org_facet": [ + "CBS Corporation", + "ABC Inc", + "House of Representatives", + "National Broadcasting Co", + "Fox News Channel" + ], + "per_facet": [ + "Carlson, Tucker", + "Hannity, Sean", + "Trump, Donald J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18impeachtv/18impeachtv-thumbStandard-v2.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Daniel Sidzina watching the House impeachment debate on Wednesday at Shaw’s Tavern in Washington.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18impeachtv/18impeachtv-thumbLarge-v2.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Daniel Sidzina watching the House impeachment debate on Wednesday at Shaw’s Tavern in Washington.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18impeachtv/18impeachtv-articleInline-v2.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Daniel Sidzina watching the House impeachment debate on Wednesday at Shaw’s Tavern in Washington.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18impeachtv/18impeachtv-mediumThreeByTwo210-v3.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Daniel Sidzina watching the House impeachment debate on Wednesday at Shaw’s Tavern in Washington.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18impeachtv/18impeachtv-superJumbo-v2.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Daniel Sidzina watching the House impeachment debate on Wednesday at Shaw’s Tavern in Washington.", + "copyright": "Alyssa Schukar for The New York Times" + } + ], + "short_url": "https://nyti.ms/34CIAyE" + }, + { + "section": "World", + "subsection": "Europe", + "title": "Putin Hints at Holding Power Past 2024, and Defends Trump on Impeachment", + "abstract": "Russia’s president mused about repealing the term limit he faces, and echoed Republican talking points saying that impeachment was a baseless bid to reverse the 2016 election.", + "url": "https://www.nytimes.com/2019/12/19/world/europe/putin-trump-impeachment.html", + "byline": "By ANDREW HIGGINS", + "item_type": "Article", + "updated_date": "2019-12-19T12:44:39-05:00", + "created_date": "2019-12-19T07:30:27-05:00", + "published_date": "2019-12-19T07:30:27-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "United States Politics and Government", + "Russian Interference in 2016 US Elections and Ties to Trump Associates" + ], + "org_facet": [], + "per_facet": [ + "Putin, Vladimir V", + "Trump, Donald J" + ], + "geo_facet": [ + "Moscow (Russia)" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19putin1/19putin1-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "President Vladimir V. Putin said at a news conference in Moscow on Thursday that the United States Senate was unlikely to remove President Trump from office.", + "copyright": "Evgenia Novozhenina/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19putin1/19putin1-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "President Vladimir V. Putin said at a news conference in Moscow on Thursday that the United States Senate was unlikely to remove President Trump from office.", + "copyright": "Evgenia Novozhenina/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19putin1/merlin_166176633_8c6e0c90-21c6-4433-990a-3f01dd710b8c-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "President Vladimir V. Putin said at a news conference in Moscow on Thursday that the United States Senate was unlikely to remove President Trump from office.", + "copyright": "Evgenia Novozhenina/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19putin1/19putin1-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "President Vladimir V. Putin said at a news conference in Moscow on Thursday that the United States Senate was unlikely to remove President Trump from office.", + "copyright": "Evgenia Novozhenina/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19putin1/merlin_166176633_8c6e0c90-21c6-4433-990a-3f01dd710b8c-superJumbo.jpg", + "format": "superJumbo", + "height": 1368, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "President Vladimir V. Putin said at a news conference in Moscow on Thursday that the United States Senate was unlikely to remove President Trump from office.", + "copyright": "Evgenia Novozhenina/Reuters" + } + ], + "short_url": "https://nyti.ms/371bnyP" + }, + { + "section": "New York", + "subsection": "", + "title": "How 2 Soviet Émigrés Fueled the Trump Impeachment Flames", + "abstract": "“Lev and Igor” were obscure businessmen who became fixtures of the Republican donor set. Then they played an unlikely role in the proceedings gripping the nation.", + "url": "https://www.nytimes.com/2019/12/19/nyregion/lev-parnas-igor-fruman.html", + "byline": "By MICHAEL ROTHFELD, BEN PROTESS, WILLIAM K. RASHBAUM, KENNETH P. VOGEL and ANDREW E. KRAMER", + "item_type": "Article", + "updated_date": "2019-12-19T09:28:38-05:00", + "created_date": "2019-12-19T03:00:12-05:00", + "published_date": "2019-12-19T03:00:12-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Impeachment", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "United States Politics and Government", + "United States International Relations", + "Russian Interference in 2016 US Elections and Ties to Trump Associates" + ], + "org_facet": [], + "per_facet": [ + "Parnas, Lev", + "Fruman, Igor", + "Giuliani, Rudolph W", + "Trump, Donald J", + "Biden, Joseph R Jr", + "Yovanovitch, Marie L" + ], + "geo_facet": [ + "Ukraine" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/nyregion/19-PARNUS-FRUMAN-01-PRINT/parnas-fruman-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Photo illustration by Najeebah Al-Ghadban" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/nyregion/19-PARNUS-FRUMAN-01-PRINT/parnas-fruman-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Photo illustration by Najeebah Al-Ghadban" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/nyregion/19-PARNUS-FRUMAN-01-PRINT/parnas-fruman-articleInline.jpg", + "format": "Normal", + "height": 246, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Photo illustration by Najeebah Al-Ghadban" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/nyregion/19-PARNUS-FRUMAN-01-PRINT/19-PARNUS-FRUMAN-01-PRINT-mediumThreeByTwo210-v3.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Photo illustration by Najeebah Al-Ghadban" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/nyregion/19-PARNUS-FRUMAN-01-PRINT/parnas-fruman-superJumbo.jpg", + "format": "superJumbo", + "height": 2048, + "width": 1583, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Photo illustration by Najeebah Al-Ghadban" + } + ], + "short_url": "https://nyti.ms/2EyYCiw" + }, + { + "section": "U.S.", + "subsection": "Politics", + "title": "Tonight’s Democratic Debate: When It Is and What to Watch For", + "abstract": "Everything you need to know about the 2020 Democratic presidential debate in Los Angeles.", + "url": "https://www.nytimes.com/2019/12/19/us/politics/when-december-democratic-debate.html", + "byline": "By SHANE GOLDMACHER", + "item_type": "Article", + "updated_date": "2019-12-19T09:00:08-05:00", + "created_date": "2019-12-19T09:00:07-05:00", + "published_date": "2019-12-19T09:00:07-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Presidential Election of 2020", + "Debates (Political)" + ], + "org_facet": [], + "per_facet": [ + "Biden, Joseph R Jr", + "Buttigieg, Pete (1982- )", + "Warren, Elizabeth", + "Sanders, Bernard" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19whattowatch/19whattowatch-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "The Democratic debate will take place at Loyola Marymount University in Los Angeles.", + "copyright": "Jenna Schoenefeld for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19whattowatch/19whattowatch-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "The Democratic debate will take place at Loyola Marymount University in Los Angeles.", + "copyright": "Jenna Schoenefeld for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19whattowatch/merlin_166056141_4010ba09-7f2d-48e2-b131-0bca452db4ba-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "The Democratic debate will take place at Loyola Marymount University in Los Angeles.", + "copyright": "Jenna Schoenefeld for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19whattowatch/merlin_166056141_4010ba09-7f2d-48e2-b131-0bca452db4ba-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "The Democratic debate will take place at Loyola Marymount University in Los Angeles.", + "copyright": "Jenna Schoenefeld for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19whattowatch/merlin_166056141_4010ba09-7f2d-48e2-b131-0bca452db4ba-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "The Democratic debate will take place at Loyola Marymount University in Los Angeles.", + "copyright": "Jenna Schoenefeld for The New York Times" + } + ], + "short_url": "https://nyti.ms/2PCro8p" + }, + { + "section": "U.S.", + "subsection": "Politics", + "title": "Andrew Yang Is Onstage, but Offstage, Asian-Americans Wonder Where They Fit In", + "abstract": "The Democrats have a historically diverse field, but the Asian-American entrepreneur will be debating with six white candidates.", + "url": "https://www.nytimes.com/2019/12/19/us/politics/Andrew-Yang-2020-Democrats-Debate.html", + "byline": "By JENNIFER MEDINA and MATT STEVENS", + "item_type": "Article", + "updated_date": "2019-12-19T09:26:34-05:00", + "created_date": "2019-12-19T03:00:14-05:00", + "published_date": "2019-12-19T03:00:14-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Race and Ethnicity", + "Debates (Political)", + "Asian-Americans", + "Presidential Election of 2020" + ], + "org_facet": [], + "per_facet": [ + "Yang, Andrew (1975- )" + ], + "geo_facet": [ + "Los Angeles (Calif)" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19asians-01/19asians-01-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Andrew Yang gets a photo with an audience member after his town hall in Dover, New Hampshire in November.", + "copyright": "Sarah Rice for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19asians-01/19asians-01-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Andrew Yang gets a photo with an audience member after his town hall in Dover, New Hampshire in November.", + "copyright": "Sarah Rice for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19asians-01/merlin_164030079_7b92d94e-54cc-48b5-afbb-ca5144e96082-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Andrew Yang gets a photo with an audience member after his town hall in Dover, New Hampshire in November.", + "copyright": "Sarah Rice for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19asians-01/merlin_164030079_7b92d94e-54cc-48b5-afbb-ca5144e96082-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Andrew Yang gets a photo with an audience member after his town hall in Dover, New Hampshire in November.", + "copyright": "Sarah Rice for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19asians-01/merlin_164030079_7b92d94e-54cc-48b5-afbb-ca5144e96082-superJumbo.jpg", + "format": "superJumbo", + "height": 1366, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Andrew Yang gets a photo with an audience member after his town hall in Dover, New Hampshire in November.", + "copyright": "Sarah Rice for The New York Times" + } + ], + "short_url": "https://nyti.ms/2Z0STeU" + }, + { + "section": "Health", + "subsection": "", + "title": "Obamacare Insurance Mandate Is Struck Down by Federal Appeals Court", + "abstract": "But the judges sent the case back to determine if other parts of the federal health care law can stand without the mandate.", + "url": "https://www.nytimes.com/2019/12/18/health/obamacare-mandate.html", + "byline": "By ABBY GOODNOUGH", + "item_type": "Article", + "updated_date": "2019-12-19T12:17:28-05:00", + "created_date": "2019-12-18T17:16:22-05:00", + "published_date": "2019-12-18T17:16:22-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Patient Protection and Affordable Care Act (2010)", + "Health Insurance and Managed Care", + "Decisions and Verdicts", + "Appeals Courts (US)", + "United States Politics and Government", + "Law and Legislation", + "Tax Cuts and Jobs Act (2017)", + "Suits and Litigation (Civil)" + ], + "org_facet": [], + "per_facet": [ + "O'Connor, Reed", + "Trump, Donald J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/science/18OBAMACARE1/18OBAMACARE1-thumbStandard-v2.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "A storefront of Sunshine Health and Life Advisors, a Florida insurance enrollment company, in Miami in November 2016.", + "copyright": "Angel Valentin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/science/18OBAMACARE1/18OBAMACARE1-thumbLarge-v2.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "A storefront of Sunshine Health and Life Advisors, a Florida insurance enrollment company, in Miami in November 2016.", + "copyright": "Angel Valentin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/science/18OBAMACARE1/18OBAMACARE1-articleInline-v2.jpg", + "format": "Normal", + "height": 126, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "A storefront of Sunshine Health and Life Advisors, a Florida insurance enrollment company, in Miami in November 2016.", + "copyright": "Angel Valentin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/science/18OBAMACARE1/18OBAMACARE1-mediumThreeByTwo210-v2.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "A storefront of Sunshine Health and Life Advisors, a Florida insurance enrollment company, in Miami in November 2016.", + "copyright": "Angel Valentin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/science/18OBAMACARE1/18OBAMACARE1-superJumbo-v2.jpg", + "format": "superJumbo", + "height": 1363, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "A storefront of Sunshine Health and Life Advisors, a Florida insurance enrollment company, in Miami in November 2016.", + "copyright": "Angel Valentin for The New York Times" + } + ], + "short_url": "https://nyti.ms/2Q5Fnmi" + }, + { + "section": "The Upshot", + "subsection": "", + "title": "Obamacare Ruling May Spare Republicans Some Political Pain", + "abstract": "The practical effect of the decision is likely to be months of delays, pushing the final outcome of the case beyond the 2020 election.", + "url": "https://www.nytimes.com/2019/12/19/upshot/obamacare-ruling.html", + "byline": "By MARGOT SANGER-KATZ", + "item_type": "Article", + "updated_date": "2019-12-19T12:37:28-05:00", + "created_date": "2019-12-19T05:02:46-05:00", + "published_date": "2019-12-19T05:02:46-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Patient Protection and Affordable Care Act (2010)", + "Presidential Election of 2020", + "United States Politics and Government", + "Health Insurance and Managed Care", + "Law and Legislation" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/upshot/00up-aca-ruling/merlin_157723173_d9eb07de-7bfe-4211-98da-dfb836219ca7-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "The public lined up in July to watch oral arguments in Texas v. U.S. at the United States Court of Appeals for the Fifth Circuit in New Orleans. ", + "copyright": "Annie Flanagan for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/upshot/00up-aca-ruling/merlin_157723173_d9eb07de-7bfe-4211-98da-dfb836219ca7-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "The public lined up in July to watch oral arguments in Texas v. U.S. at the United States Court of Appeals for the Fifth Circuit in New Orleans. ", + "copyright": "Annie Flanagan for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/upshot/00up-aca-ruling/merlin_157723173_d9eb07de-7bfe-4211-98da-dfb836219ca7-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "The public lined up in July to watch oral arguments in Texas v. U.S. at the United States Court of Appeals for the Fifth Circuit in New Orleans. ", + "copyright": "Annie Flanagan for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/upshot/00up-aca-ruling/merlin_157723173_d9eb07de-7bfe-4211-98da-dfb836219ca7-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "The public lined up in July to watch oral arguments in Texas v. U.S. at the United States Court of Appeals for the Fifth Circuit in New Orleans. ", + "copyright": "Annie Flanagan for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/upshot/00up-aca-ruling/merlin_157723173_d9eb07de-7bfe-4211-98da-dfb836219ca7-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "The public lined up in July to watch oral arguments in Texas v. U.S. at the United States Court of Appeals for the Fifth Circuit in New Orleans. ", + "copyright": "Annie Flanagan for The New York Times" + } + ], + "short_url": "https://nyti.ms/2EAsMC6" + }, + { + "section": "Opinion", + "subsection": "", + "title": "Trump Has Been Impeached. Republicans Are Following Him Down.", + "abstract": "Ignoring facts and trashing the impeachment process is no way to protect democracy.", + "url": "https://www.nytimes.com/2019/12/18/opinion/trump-impeachment-vote.html", + "byline": "By THE EDITORIAL BOARD", + "item_type": "Article", + "updated_date": "2019-12-19T10:10:44-05:00", + "created_date": "2019-12-18T20:58:28-05:00", + "published_date": "2019-12-18T20:58:28-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Impeachment", + "Constitution (US)", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "United States Politics and Government" + ], + "org_facet": [ + "Republican Party", + "House of Representatives", + "Senate" + ], + "per_facet": [ + "Trump, Donald J", + "McConnell, Mitch" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/opinion/18impeachNew/18impeachNew-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/opinion/18impeachNew/18impeachNew-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/opinion/18impeachNew/18impeachNew-articleInline.jpg", + "format": "Normal", + "height": 131, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/opinion/18impeachNew/18impeachNew-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/opinion/18impeachNew/18impeachNew-superJumbo.jpg", + "format": "superJumbo", + "height": 1415, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Damon Winter/The New York Times" + } + ], + "short_url": "https://nyti.ms/2S67wfn" + }, + { + "section": "Opinion", + "subsection": "", + "title": "Cybersecurity Experts Are Leaving the Federal Government. That’s a Problem.", + "abstract": "The departures leave our critical infrastructure, elections, data and networks vulnerable.", + "url": "https://www.nytimes.com/2019/12/19/opinion/cybersecurity-departures-government.html", + "byline": "By JOSEPHINE WOLFF", + "item_type": "Article", + "updated_date": "2019-12-19T11:30:49-05:00", + "created_date": "2019-12-19T11:30:49-05:00", + "published_date": "2019-12-19T11:30:49-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Cyberwarfare and Defense", + "Computer Security", + "Computers and the Internet", + "United States Politics and Government", + "Appointments and Executive Changes", + "Infrastructure (Public Works)" + ], + "org_facet": [ + "Defense Department", + "Homeland Security Department", + "National Security Council" + ], + "per_facet": [], + "geo_facet": [ + "United States" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19Wolff/19Wolff-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Bill Hinton/Moment, via Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19Wolff/19Wolff-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Bill Hinton/Moment, via Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19Wolff/19Wolff-articleInline.jpg", + "format": "Normal", + "height": 126, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Bill Hinton/Moment, via Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19Wolff/19Wolff-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Bill Hinton/Moment, via Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19Wolff/19Wolff-superJumbo.jpg", + "format": "superJumbo", + "height": 1363, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Bill Hinton/Moment, via Getty Images" + } + ], + "short_url": "https://nyti.ms/2Z5T4W9" + }, + { + "section": "Opinion", + "subsection": "", + "title": "Will Impeachment Drive Trump Batty?", + "abstract": "Check the belfry. Maybe things could get worse.", + "url": "https://www.nytimes.com/2019/12/18/opinion/trump-house-impeachment.html", + "byline": "By GAIL COLLINS", + "item_type": "Article", + "updated_date": "2019-12-18T21:33:25-05:00", + "created_date": "2019-12-18T21:33:25-05:00", + "published_date": "2019-12-18T21:33:25-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Impeachment", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "United States Politics and Government" + ], + "org_facet": [ + "House of Representatives", + "Democratic Party", + "Republican Party" + ], + "per_facet": [ + "Trump, Donald J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19impeach_editorial_4/19impeach_editorial_4-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "President Trump at the White House on Wednesday.", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19impeach_editorial_4/19impeach_editorial_4-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "President Trump at the White House on Wednesday.", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19impeach_editorial_4/merlin_166154874_6c4fbbd2-ea29-480c-abc1-1f4678793707-articleInline.jpg", + "format": "Normal", + "height": 129, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "President Trump at the White House on Wednesday.", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19impeach_editorial_4/19impeach_editorial_4-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "President Trump at the White House on Wednesday.", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19impeach_editorial_4/merlin_166154874_6c4fbbd2-ea29-480c-abc1-1f4678793707-superJumbo.jpg", + "format": "superJumbo", + "height": 1389, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "President Trump at the White House on Wednesday.", + "copyright": "Damon Winter/The New York Times" + } + ], + "short_url": "https://nyti.ms/35Fw0A8" + }, + { + "section": "Opinion", + "subsection": "", + "title": "Trump’s Scary Precedent: Scorning Congress", + "abstract": "The Ukraine charge gets all the attention, but the article of impeachment about obstruction is just as urgent.", + "url": "https://www.nytimes.com/2019/12/19/opinion/impeachment-article-2-trump.html", + "byline": "By KEITH E. WHITTINGTON", + "item_type": "Article", + "updated_date": "2019-12-19T11:00:07-05:00", + "created_date": "2019-12-19T11:00:07-05:00", + "published_date": "2019-12-19T11:00:07-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "Constitution (US)", + "Impeachment" + ], + "org_facet": [ + "House of Representatives", + "Senate" + ], + "per_facet": [ + "Trump, Donald J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19whittington/19Nasr1-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "A House Judiciary Committee impeachment hearing on presidential obstruction on Capitol Hill in Washington.", + "copyright": "Michael Reynolds/EPA, via Shutterstock" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19whittington/19Nasr1-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "A House Judiciary Committee impeachment hearing on presidential obstruction on Capitol Hill in Washington.", + "copyright": "Michael Reynolds/EPA, via Shutterstock" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19whittington/merlin_160965657_84ed8b98-3658-4af7-a6a0-bb47358aaf41-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "A House Judiciary Committee impeachment hearing on presidential obstruction on Capitol Hill in Washington.", + "copyright": "Michael Reynolds/EPA, via Shutterstock" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19whittington/merlin_160965657_84ed8b98-3658-4af7-a6a0-bb47358aaf41-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "A House Judiciary Committee impeachment hearing on presidential obstruction on Capitol Hill in Washington.", + "copyright": "Michael Reynolds/EPA, via Shutterstock" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19whittington/merlin_160965657_84ed8b98-3658-4af7-a6a0-bb47358aaf41-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "A House Judiciary Committee impeachment hearing on presidential obstruction on Capitol Hill in Washington.", + "copyright": "Michael Reynolds/EPA, via Shutterstock" + } + ], + "short_url": "https://nyti.ms/2Z3ANsw" + }, + { + "section": "Technology", + "subsection": "", + "title": "Where Are the Tech Zillionaires? San Francisco Faces the I.P.O. Fizzle", + "abstract": "All those tech I.P.O.s this year that were supposed to make people megarich only made them rich-ish.", + "url": "https://www.nytimes.com/2019/12/19/technology/tech-IPO-san-francisco.html", + "byline": "By NELLIE BOWLES and KATE CONGER", + "item_type": "Article", + "updated_date": "2019-12-19T12:26:13-05:00", + "created_date": "2019-12-19T10:03:43-05:00", + "published_date": "2019-12-19T10:03:43-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Real Estate and Housing (Residential)", + "Initial Public Offerings", + "Stocks and Bonds", + "High Net Worth Individuals", + "Computers and the Internet", + "Start-ups", + "Organized Labor", + "Venture Capital", + "Luxury Goods and Services" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [ + "San Francisco (Calif)", + "Silicon Valley (Calif)" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18FIZZLE/18FIZZLE-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Filippo Fontana" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18FIZZLE/18FIZZLE-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Filippo Fontana" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18FIZZLE/18FIZZLE-articleInline.jpg", + "format": "Normal", + "height": 211, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Filippo Fontana" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18FIZZLE/18FIZZLE-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Filippo Fontana" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18FIZZLE/18FIZZLE-superJumbo.jpg", + "format": "superJumbo", + "height": 2048, + "width": 1844, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Filippo Fontana" + } + ], + "short_url": "https://nyti.ms/35JXRzm" + }, + { + "section": "U.S.", + "subsection": "", + "title": "A Lonely Plea: ‘Anybody Need a Grandma for Christmas?’", + "abstract": "A woman from Tulsa, Okla., with no place to go for the holidays became a painful reminder of the isolation felt by many older Americans.", + "url": "https://www.nytimes.com/2019/12/19/us/grandma-for-christmas.html", + "byline": "By MARIA CRAMER", + "item_type": "Article", + "updated_date": "2019-12-19T11:00:09-05:00", + "created_date": "2019-12-19T11:00:10-05:00", + "published_date": "2019-12-19T11:00:10-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Elderly", + "Elder Abuse", + "Social Media", + "Christmas", + "Holidays and Special Occasions" + ], + "org_facet": [ + "Craigslist" + ], + "per_facet": [ + "Carlock, Carson" + ], + "geo_facet": [ + "Tulsa (Okla)" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00xp-grandma/00xp-grandma-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "A man in Tulsa took a screenshot of this Craigslist ad and posted it on Facebook on Dec. 11 with the hashtag “FINDGRANDMA.”", + "copyright": "Craigslist" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00xp-grandma/00xp-grandma-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "A man in Tulsa took a screenshot of this Craigslist ad and posted it on Facebook on Dec. 11 with the hashtag “FINDGRANDMA.”", + "copyright": "Craigslist" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00xp-grandma/00xp-grandma-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "A man in Tulsa took a screenshot of this Craigslist ad and posted it on Facebook on Dec. 11 with the hashtag “FINDGRANDMA.”", + "copyright": "Craigslist" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00xp-grandma/00xp-grandma-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "A man in Tulsa took a screenshot of this Craigslist ad and posted it on Facebook on Dec. 11 with the hashtag “FINDGRANDMA.”", + "copyright": "Craigslist" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00xp-grandma/00xp-grandma-superJumbo.jpg", + "format": "superJumbo", + "height": 763, + "width": 1146, + "type": "image", + "subtype": "photo", + "caption": "A man in Tulsa took a screenshot of this Craigslist ad and posted it on Facebook on Dec. 11 with the hashtag “FINDGRANDMA.”", + "copyright": "Craigslist" + } + ], + "short_url": "https://nyti.ms/2Z6yxRs" + }, + { + "section": "U.S.", + "subsection": "", + "title": "Sackler Family Members Fight Removal of Name at Tufts, Calling It a ‘Breach’", + "abstract": "After Tufts took the Sackler name off one of its buildings over the family’s role in the opioid crisis, some family members are crying foul.", + "url": "https://www.nytimes.com/2019/12/19/us/sackler-opioids-tufts.html", + "byline": "By KATE TAYLOR", + "item_type": "Article", + "updated_date": "2019-12-19T11:56:17-05:00", + "created_date": "2019-12-19T10:58:24-05:00", + "published_date": "2019-12-19T10:58:24-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Opioids and Opiates" + ], + "org_facet": [ + "Tufts University" + ], + "per_facet": [ + "Sackler Family" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/us/19SACKLER/19SACKLER-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "The Sackler name was removed earlier this month from buildings on the Tufts Medical Center campus in Boston.", + "copyright": "Cody O'Loughlin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/19SACKLER/19SACKLER-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "The Sackler name was removed earlier this month from buildings on the Tufts Medical Center campus in Boston.", + "copyright": "Cody O'Loughlin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/19SACKLER/merlin_165484488_ec6318be-ceeb-49f7-90b5-e0b546251197-articleInline.jpg", + "format": "Normal", + "height": 152, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "The Sackler name was removed earlier this month from buildings on the Tufts Medical Center campus in Boston.", + "copyright": "Cody O'Loughlin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/19SACKLER/19SACKLER-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "The Sackler name was removed earlier this month from buildings on the Tufts Medical Center campus in Boston.", + "copyright": "Cody O'Loughlin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/19SACKLER/merlin_165484488_ec6318be-ceeb-49f7-90b5-e0b546251197-superJumbo.jpg", + "format": "superJumbo", + "height": 1638, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "The Sackler name was removed earlier this month from buildings on the Tufts Medical Center campus in Boston.", + "copyright": "Cody O'Loughlin for The New York Times" + } + ], + "short_url": "https://nyti.ms/2M9tCd2" + }, + { + "section": "World", + "subsection": "Europe", + "title": "Shooting Erupts at Russia Spy Agency’s Moscow Headquarters", + "abstract": "Russian news reports said up to three people were killed in a shooting in or near the reception area of the Federal Security Service headquarters in central Moscow.", + "url": "https://www.nytimes.com/2019/12/19/world/europe/fsb-headquarters-shooting-russia.html", + "byline": "By ANDREW HIGGINS and IVAN NECHEPURENKO", + "item_type": "Article", + "updated_date": "2019-12-19T12:34:37-05:00", + "created_date": "2019-12-19T11:01:01-05:00", + "published_date": "2019-12-19T11:01:01-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [], + "org_facet": [ + "Federal Security Service" + ], + "per_facet": [], + "geo_facet": [ + "Moscow (Russia)" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19moscow-sub3/19moscow-sub3-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Police outside the Federal Security Service building in Moscow on Thursday.", + "copyright": "Shamil Zhumatov/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19moscow-sub3/19moscow-sub3-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Police outside the Federal Security Service building in Moscow on Thursday.", + "copyright": "Shamil Zhumatov/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19moscow-sub3/merlin_166186656_37350ec3-1d9f-4c90-9c92-8dd1271faa1c-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Police outside the Federal Security Service building in Moscow on Thursday.", + "copyright": "Shamil Zhumatov/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19moscow-sub3/merlin_166186656_37350ec3-1d9f-4c90-9c92-8dd1271faa1c-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Police outside the Federal Security Service building in Moscow on Thursday.", + "copyright": "Shamil Zhumatov/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19moscow-sub3/merlin_166186656_37350ec3-1d9f-4c90-9c92-8dd1271faa1c-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Police outside the Federal Security Service building in Moscow on Thursday.", + "copyright": "Shamil Zhumatov/Reuters" + } + ], + "short_url": "https://nyti.ms/2McIibp" + }, + { + "section": "Business", + "subsection": "", + "title": "Goldman Sachs Is in Talks to Settle Malaysia Fund Scandal", + "abstract": "A settlement with federal prosecutors could be reached as soon as January.", + "url": "https://www.nytimes.com/2019/12/19/business/goldman-sachs-1mdb.html", + "byline": "By EMILY FLITTER and MATTHEW GOLDSTEIN", + "item_type": "Article", + "updated_date": "2019-12-19T11:45:51-05:00", + "created_date": "2019-12-19T09:45:14-05:00", + "published_date": "2019-12-19T09:45:14-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Suits and Litigation (Civil)", + "Sovereign Wealth Funds", + "Fines (Penalties)", + "Bribery and Kickbacks" + ], + "org_facet": [ + "1Malaysia Development Berhad (1MDB)", + "Goldman Sachs Group Inc" + ], + "per_facet": [ + "Low Jho (1981- )", + "Leissner, Tim" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/business/19goldman2/19goldman2-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Demonstrators held pictures of Mr. Low and a dummy of his luxury yacht Equanimity during a protest in Kuala Lumpur, Malaysia.", + "copyright": "Sadiq Asyraf/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/business/19goldman2/19goldman2-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Demonstrators held pictures of Mr. Low and a dummy of his luxury yacht Equanimity during a protest in Kuala Lumpur, Malaysia.", + "copyright": "Sadiq Asyraf/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/business/19goldman2/merlin_136838070_34fbbedf-a5de-4018-b54b-9afa8bb13d55-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Demonstrators held pictures of Mr. Low and a dummy of his luxury yacht Equanimity during a protest in Kuala Lumpur, Malaysia.", + "copyright": "Sadiq Asyraf/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/business/19goldman2/19goldman2-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Demonstrators held pictures of Mr. Low and a dummy of his luxury yacht Equanimity during a protest in Kuala Lumpur, Malaysia.", + "copyright": "Sadiq Asyraf/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/business/19goldman2/merlin_136838070_34fbbedf-a5de-4018-b54b-9afa8bb13d55-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Demonstrators held pictures of Mr. Low and a dummy of his luxury yacht Equanimity during a protest in Kuala Lumpur, Malaysia.", + "copyright": "Sadiq Asyraf/Associated Press" + } + ], + "short_url": "https://nyti.ms/34wgzJe" + }, + { + "section": "Technology", + "subsection": "", + "title": "Uber Settles Federal Investigation Into Workplace Culture", + "abstract": "The ride-hailing company “permitted a culture of sexual harassment and retaliation,” the Equal Employment Opportunity Commission found.", + "url": "https://www.nytimes.com/2019/12/18/technology/uber-settles-eeoc-investigation-workplace-culture.html", + "byline": "By KATE CONGER", + "item_type": "Article", + "updated_date": "2019-12-19T12:07:38-05:00", + "created_date": "2019-12-18T17:45:36-05:00", + "published_date": "2019-12-18T17:45:36-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Sexual Harassment", + "Car Services and Livery Cabs", + "Workplace Hazards and Violations", + "Computers and the Internet" + ], + "org_facet": [ + "Uber Technologies Inc", + "Equal Employment Opportunity Commission" + ], + "per_facet": [ + "Khosrowshahi, Dara", + "Kalanick, Travis", + "Fowler, Susan J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18uber/18uber-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "The Uber headquarters in San Francisco. The company will start a $4.4 million fund to pay current and former employees who were sexually harassed at work.", + "copyright": "Sarahbeth Maney for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18uber/18uber-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "The Uber headquarters in San Francisco. The company will start a $4.4 million fund to pay current and former employees who were sexually harassed at work.", + "copyright": "Sarahbeth Maney for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18uber/merlin_157173588_7f1ef397-2c42-4eff-bda1-2f7976afaf8a-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "The Uber headquarters in San Francisco. The company will start a $4.4 million fund to pay current and former employees who were sexually harassed at work.", + "copyright": "Sarahbeth Maney for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18uber/18uber-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "The Uber headquarters in San Francisco. The company will start a $4.4 million fund to pay current and former employees who were sexually harassed at work.", + "copyright": "Sarahbeth Maney for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18uber/merlin_157173588_7f1ef397-2c42-4eff-bda1-2f7976afaf8a-superJumbo.jpg", + "format": "superJumbo", + "height": 1366, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "The Uber headquarters in San Francisco. The company will start a $4.4 million fund to pay current and former employees who were sexually harassed at work.", + "copyright": "Sarahbeth Maney for The New York Times" + } + ], + "short_url": "https://nyti.ms/2M8Tfuu" + }, + { + "section": "World", + "subsection": "Asia Pacific", + "title": "Indonesia Lets Plastic Burning Continue Despite Warning on Toxins", + "abstract": "The Indonesian government pushed back on an international study that found high levels of dioxin in a village where plastic is burned to produce tofu.", + "url": "https://www.nytimes.com/2019/12/19/world/asia/indonesia-dioxin-plastic-tofu.html", + "byline": "By RICHARD C. PADDOCK", + "item_type": "Article", + "updated_date": "2019-12-19T04:29:18-05:00", + "created_date": "2019-12-19T02:54:39-05:00", + "published_date": "2019-12-19T02:54:39-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Plastics", + "Dioxin", + "Waste Materials and Disposal", + "Tofu", + "Environment" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19indonesia-toxin-1/19indonesia-toxin-1-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Black smoke, caused by burning plastic as fuel at a tofu factory, is seen in Tropodo, Indonesia, in November.", + "copyright": "Ulet Ifansasti for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19indonesia-toxin-1/19indonesia-toxin-1-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Black smoke, caused by burning plastic as fuel at a tofu factory, is seen in Tropodo, Indonesia, in November.", + "copyright": "Ulet Ifansasti for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19indonesia-toxin-1/merlin_163928940_8a6409cc-c6ba-4063-87b2-d695acb1a3f2-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Black smoke, caused by burning plastic as fuel at a tofu factory, is seen in Tropodo, Indonesia, in November.", + "copyright": "Ulet Ifansasti for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19indonesia-toxin-1/merlin_163928940_8a6409cc-c6ba-4063-87b2-d695acb1a3f2-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Black smoke, caused by burning plastic as fuel at a tofu factory, is seen in Tropodo, Indonesia, in November.", + "copyright": "Ulet Ifansasti for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19indonesia-toxin-1/merlin_163928940_8a6409cc-c6ba-4063-87b2-d695acb1a3f2-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Black smoke, caused by burning plastic as fuel at a tofu factory, is seen in Tropodo, Indonesia, in November.", + "copyright": "Ulet Ifansasti for The New York Times" + } + ], + "short_url": "https://nyti.ms/2rbzJXe" + }, + { + "section": "World", + "subsection": "Asia Pacific", + "title": "‘Why My Baby?’: How Measles Robbed Samoa of Its Young", + "abstract": "When the virus arrived on its shores, the Pacific island nation was grievously unprepared. It had left the door to contagion wide open, and thousands of children have suffered.", + "url": "https://www.nytimes.com/2019/12/19/world/asia/samoa-measles.html", + "byline": "By ISABELLA KWAI and MATTHEW ABBOTT", + "item_type": "Article", + "updated_date": "2019-12-19T06:03:12-05:00", + "created_date": "2019-12-19T05:29:07-05:00", + "published_date": "2019-12-19T05:29:07-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Measles", + "Vaccination and Immunization", + "Epidemics" + ], + "org_facet": [], + "per_facet": [ + "Kennedy, Robert F Jr" + ], + "geo_facet": [ + "Samoa", + "Australia" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19samoa-4/19samoa-4-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Child-size coffins at a funeral home.", + "copyright": "" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19samoa-4/19samoa-4-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Child-size coffins at a funeral home.", + "copyright": "" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19samoa-4/merlin_166064403_da19731d-747a-4e18-b7c3-522386da9a1e-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Child-size coffins at a funeral home.", + "copyright": "" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19samoa-4/19samoa-4-mediumThreeByTwo210-v2.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Child-size coffins at a funeral home.", + "copyright": "" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19samoa-4/merlin_166064403_da19731d-747a-4e18-b7c3-522386da9a1e-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Child-size coffins at a funeral home.", + "copyright": "" + } + ], + "short_url": "https://nyti.ms/2PBt8i3" + }, + { + "section": "World", + "subsection": "Asia Pacific", + "title": "Intellectuals Arrested as Protests Over Citizenship Law Sweep India", + "abstract": "A well-known biographer of Gandhi was among those detained on Thursday as opposition to a new citizenship law continued to roil Indian cities.", + "url": "https://www.nytimes.com/2019/12/19/world/asia/india-protests-muslim.html", + "byline": "By JEFFREY GETTLEMAN", + "item_type": "Article", + "updated_date": "2019-12-19T09:22:49-05:00", + "created_date": "2019-12-19T05:39:07-05:00", + "published_date": "2019-12-19T05:39:07-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Demonstrations, Protests and Riots", + "Muslims and Islam" + ], + "org_facet": [ + "Bharatiya Janata Party" + ], + "per_facet": [ + "Guha, Ramachandra", + "Modi, Narendra" + ], + "geo_facet": [ + "India" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19india-protests-1/19india-protests-1-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Protesters denouncing a new citizenship law near the historic Red Fort in New Delhi on Thursday.", + "copyright": "Altaf Qadri/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19india-protests-1/19india-protests-1-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Protesters denouncing a new citizenship law near the historic Red Fort in New Delhi on Thursday.", + "copyright": "Altaf Qadri/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19india-protests-1/merlin_166172076_2aa9a857-eaa9-4317-8d17-29ec0f31600d-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Protesters denouncing a new citizenship law near the historic Red Fort in New Delhi on Thursday.", + "copyright": "Altaf Qadri/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19india-protests-1/merlin_166172076_2aa9a857-eaa9-4317-8d17-29ec0f31600d-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Protesters denouncing a new citizenship law near the historic Red Fort in New Delhi on Thursday.", + "copyright": "Altaf Qadri/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19india-protests-1/merlin_166172076_2aa9a857-eaa9-4317-8d17-29ec0f31600d-superJumbo.jpg", + "format": "superJumbo", + "height": 1366, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Protesters denouncing a new citizenship law near the historic Red Fort in New Delhi on Thursday.", + "copyright": "Altaf Qadri/Associated Press" + } + ], + "short_url": "https://nyti.ms/2sGtMSA" + }, + { + "section": "Arts", + "subsection": "Art & Design", + "title": "A ‘Great Wealth Transfer’ Is Coming. What Will It Mean for Art?", + "abstract": "More than $15 trillion in assets is expected to be passed to younger generations in the next decade, including a lot of art. But will they want it?", + "url": "https://www.nytimes.com/2019/12/18/arts/design/great-wealth-transfer-art.html", + "byline": "By SCOTT REYBURN", + "item_type": "Article", + "updated_date": "2019-12-19T04:39:16-05:00", + "created_date": "2019-12-18T11:50:19-05:00", + "published_date": "2019-12-18T11:50:19-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Art", + "Wills and Estates", + "High Net Worth Individuals", + "Collectors and Collections", + "Baby Boomers", + "Generation X", + "Millennial Generation", + "Auctions" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/17/arts/17wealth-transfer1/17wealth-transfer1-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Works by Andy Warhol, whose “Double Elvis,” above, sold for $53 million at Christie’s in May, are prized by baby-boomer collectors.", + "copyright": "John Lamparski/Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/17/arts/17wealth-transfer1/17wealth-transfer1-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Works by Andy Warhol, whose “Double Elvis,” above, sold for $53 million at Christie’s in May, are prized by baby-boomer collectors.", + "copyright": "John Lamparski/Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/17/arts/17wealth-transfer1/merlin_166084740_eb7234f8-52ac-4db3-9a8c-f8cb9a451887-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Works by Andy Warhol, whose “Double Elvis,” above, sold for $53 million at Christie’s in May, are prized by baby-boomer collectors.", + "copyright": "John Lamparski/Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/17/arts/17wealth-transfer1/17wealth-transfer1-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Works by Andy Warhol, whose “Double Elvis,” above, sold for $53 million at Christie’s in May, are prized by baby-boomer collectors.", + "copyright": "John Lamparski/Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/17/arts/17wealth-transfer1/merlin_166084740_eb7234f8-52ac-4db3-9a8c-f8cb9a451887-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Works by Andy Warhol, whose “Double Elvis,” above, sold for $53 million at Christie’s in May, are prized by baby-boomer collectors.", + "copyright": "John Lamparski/Getty Images" + } + ], + "short_url": "https://nyti.ms/2Z0bF69" + }, + { + "section": "U.S.", + "subsection": "", + "title": "Puerto Rico Tries to Preserve Cockfighting Days Before Ban", + "abstract": "The governor signed legislation intended to sidestep a ban approved by Congress. The law is likely to end up in court.", + "url": "https://www.nytimes.com/2019/12/18/us/puerto-rico-cockfighting-ban.html", + "byline": "By PATRICIA MAZZEI", + "item_type": "Article", + "updated_date": "2019-12-18T20:48:01-05:00", + "created_date": "2019-12-18T15:17:40-05:00", + "published_date": "2019-12-18T15:17:40-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "United States Politics and Government", + "Cockfighting", + "Animal Abuse, Rights and Welfare", + "Farm Bill (US)", + "Law and Legislation" + ], + "org_facet": [], + "per_facet": [ + "Vazquez Garced, Wanda" + ], + "geo_facet": [ + "Puerto Rico" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/us/18cockfighting/18cockfighting-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "A cockfighting ban in Puerto Rico has drawn praise from animal rights activists and anger from some who consider the practice part of the island’s culture.", + "copyright": "Erika P. Rodriguez for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/18cockfighting/18cockfighting-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "A cockfighting ban in Puerto Rico has drawn praise from animal rights activists and anger from some who consider the practice part of the island’s culture.", + "copyright": "Erika P. Rodriguez for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/18cockfighting/18cockfighting-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "A cockfighting ban in Puerto Rico has drawn praise from animal rights activists and anger from some who consider the practice part of the island’s culture.", + "copyright": "Erika P. Rodriguez for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/18cockfighting/18cockfighting-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "A cockfighting ban in Puerto Rico has drawn praise from animal rights activists and anger from some who consider the practice part of the island’s culture.", + "copyright": "Erika P. Rodriguez for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/18cockfighting/merlin_165297531_38175177-2930-406f-849e-6dd6bfe0ec4f-superJumbo.jpg", + "format": "superJumbo", + "height": 1366, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "A cockfighting ban in Puerto Rico has drawn praise from animal rights activists and anger from some who consider the practice part of the island’s culture.", + "copyright": "Erika P. Rodriguez for The New York Times" + } + ], + "short_url": "https://nyti.ms/35zdtp2" + }, + { + "section": "Smarter Living", + "subsection": "", + "title": "Choose a Last-Minute Gift Anyone Would Love", + "abstract": "You’re stuck behind the curve and you don’t know what to get for someone on your list, but you do know you’re running out of time. We can help.", + "url": "https://www.nytimes.com/2019/12/18/smarter-living/last-minute-gift-ideas.html", + "byline": "By ALAN HENRY", + "item_type": "Article", + "updated_date": "2019-12-18T18:00:07-05:00", + "created_date": "2019-12-18T18:00:07-05:00", + "published_date": "2019-12-18T18:00:07-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Gifts", + "Holidays and Special Occasions", + "Christmas", + "Prices (Fares, Fees and Rates)", + "Computer and Video Games", + "Travel and Vacations", + "your-feed-wirecutter" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00sl-lastminute/00sl-lastminute-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00sl-lastminute/00sl-lastminute-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00sl-lastminute/00sl-lastminute-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00sl-lastminute/00sl-lastminute-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00sl-lastminute/00sl-lastminute-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Getty Images" + } + ], + "short_url": "https://nyti.ms/38USaQL" + }, + { + "section": "Smarter Living", + "subsection": "Wirecutter", + "title": "Want to Gift Someone a Pet? Here’s What to Do First", + "abstract": "Before you put a bow on a puppy or kitten for your family, here’s what to consider when getting a loved one a pet.", + "url": "https://www.nytimes.com/2019/12/16/smarter-living/wirecutter/want-to-gift-someone-a-pet-heres-what-to-do-first.html", + "byline": "By KAITLYN WELLS", + "item_type": "Article", + "updated_date": "2019-12-17T09:53:08-05:00", + "created_date": "2019-12-16T17:30:04-05:00", + "published_date": "2019-12-16T17:30:04-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Pets", + "Animal Behavior", + "Dogs", + "Cats", + "your-feed-wirecutter" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/03/smarter-living/00wc_petgift/00wc_petgift-thumbStandard.png", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Yann Bastard" + }, + { + "url": "https://static01.nyt.com/images/2019/12/03/smarter-living/00wc_petgift/00wc_petgift-thumbLarge.png", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Yann Bastard" + }, + { + "url": "https://static01.nyt.com/images/2019/12/03/smarter-living/00wc_petgift/00wc_petgift-articleInline.png", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Yann Bastard" + }, + { + "url": "https://static01.nyt.com/images/2019/12/03/smarter-living/00wc_petgift/00wc_petgift-mediumThreeByTwo210.png", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Yann Bastard" + }, + { + "url": "https://static01.nyt.com/images/2019/12/03/smarter-living/00wc_petgift/00wc_petgift-superJumbo.png", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Yann Bastard" + } + ], + "short_url": "https://nyti.ms/2M0CUbq" + }, + { + "section": "Smarter Living", + "subsection": "", + "title": "You Could Die Today. Here’s How to Reduce That Risk.", + "abstract": "No one lives forever, but you can do things to extend your life for as long as possible. Let’s walk through a typical day and see where your risks are highest.", + "url": "https://www.nytimes.com/2019/12/12/smarter-living/reducing-fatality-risks.html", + "byline": "By ALEXANDER WEBB", + "item_type": "Article", + "updated_date": "2019-12-12T17:30:05-05:00", + "created_date": "2019-12-12T17:30:05-05:00", + "published_date": "2019-12-12T17:30:05-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Deaths (Fatalities)", + "Traffic Accidents and Safety", + "Hygiene and Cleanliness", + "Bacteria", + "Food", + "Alcohol Abuse" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/10/09/smarter-living/00sl_dietoday/00sl_dietoday-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Minet Kim" + }, + { + "url": "https://static01.nyt.com/images/2019/10/09/smarter-living/00sl_dietoday/00sl_dietoday-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Minet Kim" + }, + { + "url": "https://static01.nyt.com/images/2019/10/09/smarter-living/00sl_dietoday/00sl_dietoday-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Minet Kim" + }, + { + "url": "https://static01.nyt.com/images/2019/10/09/smarter-living/00sl_dietoday/00sl_dietoday-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Minet Kim" + }, + { + "url": "https://static01.nyt.com/images/2019/10/09/smarter-living/00sl_dietoday/00sl_dietoday-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Minet Kim" + } + ], + "short_url": "https://nyti.ms/35oxUoC" + }, + { + "section": "Smarter Living", + "subsection": "", + "title": "The Right Way to Close Out an Email. (Skip That Inspirational Quote.)", + "abstract": "Signoffs and signatures: Why hitting send can be so fraught.", + "url": "https://www.nytimes.com/2019/12/15/smarter-living/the-right-way-to-close-out-an-email-skip-that-inspirational-quote.html", + "byline": "By JEN DOLL", + "item_type": "Article", + "updated_date": "2019-12-15T22:00:01-05:00", + "created_date": "2019-12-15T22:00:01-05:00", + "published_date": "2019-12-15T22:00:01-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/10/smarter-living/10sl-emailend-promo/10sl-emailend-promo-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Pablo Rochat" + }, + { + "url": "https://static01.nyt.com/images/2019/12/10/smarter-living/10sl-emailend-promo/10sl-emailend-promo-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Pablo Rochat" + }, + { + "url": "https://static01.nyt.com/images/2019/12/10/smarter-living/10sl-emailend-promo/10sl-emailend-promo-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Pablo Rochat" + }, + { + "url": "https://static01.nyt.com/images/2019/12/10/smarter-living/10sl-emailend-promo/10sl-emailend-promo-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Pablo Rochat" + }, + { + "url": "https://static01.nyt.com/images/2019/12/10/smarter-living/10sl-emailend-promo/10sl-emailend-promo-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Pablo Rochat" + } + ], + "short_url": "https://nyti.ms/36Dez3d" + }, + { + "section": "Movies", + "subsection": "", + "title": "The Oscars Will Soon Face a Best-Actor Bloodbath", + "abstract": "Only five men will be nominated, but with at least a dozen solid contenders, including big names like Leonardo DiCaprio and Robert De Niro, who will make the final cut?", + "url": "https://www.nytimes.com/2019/12/18/movies/oscars-best-actor-contenders.html", + "byline": "By KYLE BUCHANAN", + "item_type": "Article", + "updated_date": "2019-12-18T13:55:23-05:00", + "created_date": "2019-12-18T13:55:23-05:00", + "published_date": "2019-12-18T13:55:23-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Movies", + "Academy Awards (Oscars)", + "Actors and Actresses", + "Joker (Movie)", + "The Irishman (Movie)", + "Once Upon a Time in Hollywood (Movie)", + "Dolemite Is My Name (Movie)", + "Uncut Gems (Movie)", + "Pain and Glory (Movie)", + "Rocketman (Movie)", + "Richard Jewell (Movie)", + "The Two Popes (Movie)", + "1917 (Movie)", + "Ford v Ferrari (Movie)", + "Marriage Story (Movie)" + ], + "org_facet": [], + "per_facet": [ + "Bale, Christian", + "Banderas, Antonio", + "De Niro, Robert", + "DiCaprio, Leonardo", + "Driver, Adam", + "Egerton, Taron (1989- )", + "Hauser, Paul Walter", + "MacKay, George", + "Murphy, Eddie", + "Sandler, Adam", + "Pryce, Jonathan", + "Phoenix, Joaquin" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/arts/18carpetbagger-promo/18carpetbagger-thumbStandard-v4.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Clockwise from top left: Antonio Banderas in “Pain and Glory,” Eddie Murphy in “Dolemite Is My Name,” Adam Sandler in “Uncut Gems,” Adam Driver in “Marriage Story,” Jonathan Pryce in “The Two Popes” and Joaquin Phoenix in “Joker.”", + "copyright": "Clockwise from top left: El Deseo and Sony Pictures Classics; Netflix; A24; Warner Bros." + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/arts/18carpetbagger-promo/18carpetbagger-thumbLarge-v4.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Clockwise from top left: Antonio Banderas in “Pain and Glory,” Eddie Murphy in “Dolemite Is My Name,” Adam Sandler in “Uncut Gems,” Adam Driver in “Marriage Story,” Jonathan Pryce in “The Two Popes” and Joaquin Phoenix in “Joker.”", + "copyright": "Clockwise from top left: El Deseo and Sony Pictures Classics; Netflix; A24; Warner Bros." + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/arts/18carpetbagger-promo/18carpetbagger-articleInline-v3.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Clockwise from top left: Antonio Banderas in “Pain and Glory,” Eddie Murphy in “Dolemite Is My Name,” Adam Sandler in “Uncut Gems,” Adam Driver in “Marriage Story,” Jonathan Pryce in “The Two Popes” and Joaquin Phoenix in “Joker.”", + "copyright": "Clockwise from top left: El Deseo and Sony Pictures Classics; Netflix; A24; Warner Bros." + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/arts/18carpetbagger-promo/18carpetbagger-mediumThreeByTwo210-v3.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Clockwise from top left: Antonio Banderas in “Pain and Glory,” Eddie Murphy in “Dolemite Is My Name,” Adam Sandler in “Uncut Gems,” Adam Driver in “Marriage Story,” Jonathan Pryce in “The Two Popes” and Joaquin Phoenix in “Joker.”", + "copyright": "Clockwise from top left: El Deseo and Sony Pictures Classics; Netflix; A24; Warner Bros." + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/arts/18carpetbagger-promo/18carpetbagger-superJumbo-v3.jpg", + "format": "superJumbo", + "height": 1366, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Clockwise from top left: Antonio Banderas in “Pain and Glory,” Eddie Murphy in “Dolemite Is My Name,” Adam Sandler in “Uncut Gems,” Adam Driver in “Marriage Story,” Jonathan Pryce in “The Two Popes” and Joaquin Phoenix in “Joker.”", + "copyright": "Clockwise from top left: El Deseo and Sony Pictures Classics; Netflix; A24; Warner Bros." + } + ], + "short_url": "https://nyti.ms/2Pz0ZIm" + }, + { + "section": "Obituaries", + "subsection": "", + "title": "Overlooked No More: Earl Tucker, a Dancer Known as ‘Snakehips’", + "abstract": "Tucker was a name attraction in Harlem nightclubs in the 1920s, and his moves were echoed by Elvis Presley and Michael Jackson.", + "url": "https://www.nytimes.com/2019/12/18/obituaries/earl-tucker-overlooked.html", + "byline": "By BRIAN SEIBERT", + "item_type": "Article", + "updated_date": "2019-12-19T05:57:45-05:00", + "created_date": "2019-12-18T16:22:54-05:00", + "published_date": "2019-12-18T16:22:54-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Black People", + "Dancing", + "Race and Ethnicity", + "Biographical Information", + "Past Tense" + ], + "org_facet": [], + "per_facet": [ + "Tucker, Earl (1905-37)", + "Presley, Elvis", + "Ellington, Duke", + "Jackson, Michael" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/09/multimedia/00overlooked-tucker/00overlooked-tucker-thumbStandard-v7.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Earl \"Snakehips\" Tucker in about 1930. His dancing was entertainment that played to the illicit appeal of Harlem nightclubs.", + "copyright": "NYPL Schomburg Center for Research in Black Culture" + }, + { + "url": "https://static01.nyt.com/images/2019/12/09/multimedia/00overlooked-tucker/00overlooked-tucker-thumbLarge-v7.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Earl \"Snakehips\" Tucker in about 1930. His dancing was entertainment that played to the illicit appeal of Harlem nightclubs.", + "copyright": "NYPL Schomburg Center for Research in Black Culture" + }, + { + "url": "https://static01.nyt.com/images/2019/12/09/multimedia/00overlooked-tucker/00overlooked-tucker-articleInline-v5.jpg", + "format": "Normal", + "height": 240, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Earl \"Snakehips\" Tucker in about 1930. His dancing was entertainment that played to the illicit appeal of Harlem nightclubs.", + "copyright": "NYPL Schomburg Center for Research in Black Culture" + }, + { + "url": "https://static01.nyt.com/images/2019/12/09/multimedia/00overlooked-tucker/00overlooked-tucker-mediumThreeByTwo210-v7.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Earl \"Snakehips\" Tucker in about 1930. His dancing was entertainment that played to the illicit appeal of Harlem nightclubs.", + "copyright": "NYPL Schomburg Center for Research in Black Culture" + }, + { + "url": "https://static01.nyt.com/images/2019/12/09/multimedia/00overlooked-tucker/00overlooked-tucker-superJumbo-v5.jpg", + "format": "superJumbo", + "height": 2048, + "width": 1619, + "type": "image", + "subtype": "photo", + "caption": "Earl \"Snakehips\" Tucker in about 1930. His dancing was entertainment that played to the illicit appeal of Harlem nightclubs.", + "copyright": "NYPL Schomburg Center for Research in Black Culture" + } + ], + "short_url": "https://nyti.ms/2PxEymZ" + }, + { + "section": "Arts", + "subsection": "", + "title": "A New ‘Christmas Carol’ Explores the Roots of Scrooge’s Scorn", + "abstract": "A new TV adaptation by Steven Knight (“Peaky Blinders”) presents a portrait of the miser as a (relatively) young man.", + "url": "https://www.nytimes.com/2019/12/13/arts/a-christmas-carol-scrooge-fx.html", + "byline": "By ROSLYN SULCAS", + "item_type": "Article", + "updated_date": "2019-12-13T05:00:13-05:00", + "created_date": "2019-12-13T05:00:13-05:00", + "published_date": "2019-12-13T05:00:13-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Television", + "A Christmas Carol (TV Program)" + ], + "org_facet": [ + "FX (TV Network)", + "British Broadcasting Corp" + ], + "per_facet": [ + "Murphy, Nick (Film Director)", + "Knight, Steven", + "Pearce, Guy" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/15/arts/15christmascarol3/15christmascarol3-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Serkis as the Ghost of Christmas Past. “Every generation needs its own interpretation” of Dickens’s story, said the creator Steven Knight.", + "copyright": "Robert Viglasky/FX" + }, + { + "url": "https://static01.nyt.com/images/2019/12/15/arts/15christmascarol3/15christmascarol3-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Serkis as the Ghost of Christmas Past. “Every generation needs its own interpretation” of Dickens’s story, said the creator Steven Knight.", + "copyright": "Robert Viglasky/FX" + }, + { + "url": "https://static01.nyt.com/images/2019/12/15/arts/15christmascarol3/15christmascarol3-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Serkis as the Ghost of Christmas Past. “Every generation needs its own interpretation” of Dickens’s story, said the creator Steven Knight.", + "copyright": "Robert Viglasky/FX" + }, + { + "url": "https://static01.nyt.com/images/2019/12/15/arts/15christmascarol3/15christmascarol3-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Serkis as the Ghost of Christmas Past. “Every generation needs its own interpretation” of Dickens’s story, said the creator Steven Knight.", + "copyright": "Robert Viglasky/FX" + }, + { + "url": "https://static01.nyt.com/images/2019/12/15/arts/15christmascarol3/15christmascarol3-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Serkis as the Ghost of Christmas Past. “Every generation needs its own interpretation” of Dickens’s story, said the creator Steven Knight.", + "copyright": "Robert Viglasky/FX" + } + ], + "short_url": "https://nyti.ms/2EhCokQ" + }, + { + "section": "Arts", + "subsection": "Television", + "title": "Trump Has Been Moved to America’s Spam Folder, Says Trevor Noah", + "abstract": "The impeachment, of course, was the talk of late night on Wednesday. Noah said President Trump had gone through “all the stages of grief in one tweet.”", + "url": "https://www.nytimes.com/2019/12/19/arts/television/late-night-impeachment.html", + "byline": "By TRISH BENDIX", + "item_type": "Article", + "updated_date": "2019-12-19T02:18:35-05:00", + "created_date": "2019-12-19T02:18:35-05:00", + "published_date": "2019-12-19T02:18:35-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "The Tonight Show (TV Program)" + ], + "org_facet": [], + "per_facet": [ + "Colbert, Stephen", + "Fallon, Jimmy", + "Noah, Trevor (1984- )", + "Trump, Donald J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/arts/19latenight/19latenight-thumbStandard.png", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "As the House made him the third impeached president in American history, President Trump “went through all the stages of grief in one tweet,” Trevor Noah said.", + "copyright": "Comedy Central" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/arts/19latenight/19latenight-thumbLarge.png", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "As the House made him the third impeached president in American history, President Trump “went through all the stages of grief in one tweet,” Trevor Noah said.", + "copyright": "Comedy Central" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/arts/19latenight/19latenight-articleInline.png", + "format": "Normal", + "height": 106, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "As the House made him the third impeached president in American history, President Trump “went through all the stages of grief in one tweet,” Trevor Noah said.", + "copyright": "Comedy Central" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/arts/19latenight/19latenight-mediumThreeByTwo210.png", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "As the House made him the third impeached president in American history, President Trump “went through all the stages of grief in one tweet,” Trevor Noah said.", + "copyright": "Comedy Central" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/arts/19latenight/19latenight-superJumbo.png", + "format": "superJumbo", + "height": 436, + "width": 782, + "type": "image", + "subtype": "photo", + "caption": "As the House made him the third impeached president in American history, President Trump “went through all the stages of grief in one tweet,” Trevor Noah said.", + "copyright": "Comedy Central" + } + ], + "short_url": "https://nyti.ms/35EOPnc" + }, + { + "section": "Neediest Cases", + "subsection": "", + "title": "After Sputtering in ‘Dead-End Jobs,’ Pursuing a Tech Career", + "abstract": "At 9, Teonia Alston began experimenting with computers. Since having a baby and balancing unfulfilling jobs, she’s motivated to pursue her passion.", + "url": "https://www.nytimes.com/2019/12/18/neediest-cases/tech-studies-mother-interview-clothes.html", + "byline": "By ELISHA BROWN", + "item_type": "Article", + "updated_date": "2019-12-18T23:30:16-05:00", + "created_date": "2019-12-18T12:48:54-05:00", + "published_date": "2019-12-18T12:48:54-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [], + "org_facet": [ + "New York Times Neediest Cases Fund", + "Community Service Society of New York" + ], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/13/neediest-cases/00ncf-alston/00ncf-alston-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Ms. Alston received a grant from The Neediest Cases Fund to purchase work clothes.", + "copyright": "Michelle V. Agins/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/13/neediest-cases/00ncf-alston/00ncf-alston-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Ms. Alston received a grant from The Neediest Cases Fund to purchase work clothes.", + "copyright": "Michelle V. Agins/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/13/neediest-cases/00ncf-alston/00ncf-alston-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Ms. Alston received a grant from The Neediest Cases Fund to purchase work clothes.", + "copyright": "Michelle V. Agins/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/13/neediest-cases/00ncf-alston/00ncf-alston-mediumThreeByTwo210-v2.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Ms. Alston received a grant from The Neediest Cases Fund to purchase work clothes.", + "copyright": "Michelle V. Agins/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/13/neediest-cases/00ncf-alston/00ncf-alston-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Ms. Alston received a grant from The Neediest Cases Fund to purchase work clothes.", + "copyright": "Michelle V. Agins/The New York Times" + } + ], + "short_url": "https://nyti.ms/2Z98Mjy" + } + ] +} \ No newline at end of file diff --git a/app/src/test/java/com/task/ui/component/news/NewsListViewModelTest.kt b/app/src/test/java/com/task/ui/component/news/NewsListViewModelTest.kt index 475e3e7..d1f69bc 100644 --- a/app/src/test/java/com/task/ui/component/news/NewsListViewModelTest.kt +++ b/app/src/test/java/com/task/ui/component/news/NewsListViewModelTest.kt @@ -32,24 +32,25 @@ class NewsListViewModelTest { @get:Rule var instantExecutorRule = InstantTaskExecutorRule() - private val newsTitle = "this is test" + private lateinit var newsTitle: String private val testModelsGenerator: TestModelsGenerator = TestModelsGenerator() @Before fun setUp() { // Create class under test // We initialise the repository with no tasks + newsTitle = testModelsGenerator.getStupSearchTitle() newsListViewModel = NewsListViewModel(newsUseCase) } @Test fun getNewsList() { // Let's do a synchronous answer for the callback - val newsModeltest = testModelsGenerator.generateNewsModel(newsTitle) + val newsModeltest = testModelsGenerator.generateNewsModel() //1- Mock - double test (newsListViewModel).apply { newsModel.value = newsModeltest - newsSearchFound.value = testModelsGenerator.generateNewsItemModel(newsTitle) + newsSearchFound.value = testModelsGenerator.generateNewsItemModel() noSearchFound.value = false } val callbackCapture: CapturingSlot = slot() @@ -63,13 +64,13 @@ class NewsListViewModelTest { @Test fun testSearchSuccess() { - val newsItem = testModelsGenerator.generateNewsItemModel(newsTitle) - val newsModel = testModelsGenerator.generateNewsModel(newsTitle) + val newsItem = testModelsGenerator.generateNewsItemModel() + val newsModel = testModelsGenerator.generateNewsModel() //1- Mock val callbackCapture: CapturingSlot = slot() every { newsUseCase.getNews(callback = capture(callbackCapture)) } answers { callbackCapture.captured.onSuccess(newsModel) } - every { newsUseCase.searchByTitle(newsModel.newsItems!!, newsTitle) } returns newsItem + every { newsUseCase.searchByTitle(newsModel.newsItems, newsTitle) } returns newsItem //2- Call newsListViewModel.getNews() newsListViewModel.onSearchClick(newsTitle) @@ -80,12 +81,12 @@ class NewsListViewModelTest { @Test fun testSearchFailedWhileEmptyList() { - val newsModelWithEmptyList: NewsModel = testModelsGenerator.generateNewsModelWithEmptyList("stup") + val newsModelWithEmptyList: NewsModel = testModelsGenerator.generateNewsModelWithEmptyList() //1- Mock val callbackCapture: CapturingSlot = slot() every { newsUseCase.getNews(callback = capture(callbackCapture)) } answers { callbackCapture.captured.onSuccess(newsModelWithEmptyList) } - every { newsUseCase.searchByTitle(newsModelWithEmptyList.newsItems!!, newsTitle) } returns null + every { newsUseCase.searchByTitle(newsModelWithEmptyList.newsItems, newsTitle) } returns null //2- Call newsListViewModel.getNews() newsListViewModel.onSearchClick(newsTitle) @@ -96,12 +97,12 @@ class NewsListViewModelTest { @Test fun testSearchFailedWhenNothingMatches() { - val newsModel = testModelsGenerator.generateNewsModel(newsTitle) + val newsModel = testModelsGenerator.generateNewsModel() //1- Mock val callbackCapture: CapturingSlot = slot() every { newsUseCase.getNews(callback = capture(callbackCapture)) } answers { callbackCapture.captured.onSuccess(newsModel) } - every { newsUseCase.searchByTitle(newsModel.newsItems!!, "*") } returns null + every { newsUseCase.searchByTitle(newsModel.newsItems, "*") } returns null //2- Call newsListViewModel.getNews() newsListViewModel.onSearchClick("*") diff --git a/app/src/test/java/com/task/ui/component/news/NewsUseCaseTest.kt b/app/src/test/java/com/task/ui/component/news/NewsUseCaseTest.kt index 35406d2..5da8ba6 100644 --- a/app/src/test/java/com/task/ui/component/news/NewsUseCaseTest.kt +++ b/app/src/test/java/com/task/ui/component/news/NewsUseCaseTest.kt @@ -44,7 +44,7 @@ class NewsUseCaseTest { @Test fun testGetNewsSuccessful() { - newsModel = testModelsGenerator.generateNewsModel("Stup") + newsModel = testModelsGenerator.generateNewsModel() val serviceResponse = Data(code = Error.SUCCESS_CODE, data = newsModel) coEvery { dataRepository?.requestNews() } returns serviceResponse newsUseCase.getNews(callback!!) @@ -63,17 +63,15 @@ class NewsUseCaseTest { @Test fun searchByTitleSuccess() { - val stup = "this is news Title" - val newsItem = newsUseCase.searchByTitle(testModelsGenerator.generateNewsModel(stup).newsItems!!, stup) + val newsItem = newsUseCase.searchByTitle(testModelsGenerator.generateNewsModel().newsItems, testModelsGenerator.getStupSearchTitle()) assertNotNull(newsItem) - assertEquals(newsItem?.title, stup) + assertEquals(newsItem?.title, testModelsGenerator.getStupSearchTitle()) } @Test fun searchByTitleFail() { - val stupTitle = "this is news Title" - val stupSearch = "search title" - val newsItem = newsUseCase.searchByTitle(testModelsGenerator.generateNewsModel(stupTitle).newsItems!!, stupSearch) + val stup = "&%$##" + val newsItem = newsUseCase.searchByTitle(testModelsGenerator.generateNewsModel().newsItems, stup) assertEquals(newsItem, null) } diff --git a/app/src/test/java/com/task/ui/component/news/TestModelsGenerator.kt b/app/src/test/java/com/task/ui/component/news/TestModelsGenerator.kt index b91a71f..496e4a5 100644 --- a/app/src/test/java/com/task/ui/component/news/TestModelsGenerator.kt +++ b/app/src/test/java/com/task/ui/component/news/TestModelsGenerator.kt @@ -1,7 +1,9 @@ package com.task.ui.component.news +import com.google.gson.Gson import com.task.data.remote.dto.NewsItem import com.task.data.remote.dto.NewsModel +import java.io.File import java.util.* /** @@ -9,39 +11,44 @@ import java.util.* */ class TestModelsGenerator { + private var newsModel: NewsModel - fun generateNewsModel(stup: String): NewsModel { - val newsModel = NewsModel() - newsModel.copyright = stup - newsModel.lastUpdated = stup - newsModel.section = stup - newsModel.status = stup - newsModel.numResults = 25L - val newsItems = ArrayList() - for (i in 0..24) { - newsItems.add(generateNewsItemModel(stup)) - } - newsModel.newsItems = newsItems + init { + val gson = Gson() + val jsonString = getJson("NewsApiResponse.json") + newsModel = gson.fromJson(jsonString, NewsModel::class.java) + } + + fun generateNewsModel(): NewsModel { return newsModel } - fun generateNewsModelWithEmptyList(stup: String): NewsModel { - val newsModel = NewsModel() - newsModel.copyright = stup - newsModel.lastUpdated = stup - newsModel.section = stup - newsModel.status = stup - newsModel.numResults = 25L - val newsItems = ArrayList() - newsModel.newsItems = newsItems + fun generateNewsModelWithEmptyList(): NewsModel { + newsModel.newsItems = ArrayList() return newsModel } - fun generateNewsItemModel(stup: String): NewsItem { - val newsItem = NewsItem() - newsItem.title = stup - newsItem.abstract = stup - newsItem.url = stup - return newsItem + fun generateNewsItemModel(): NewsItem { + return newsModel.newsItems[0] + } + + fun getStupSearchTitle(): String { + return newsModel.newsItems[0].title + } + + + /** + * Helper function which will load JSON from + * the path specified + * + * @param path : Path of JSON file + * @return json : JSON from file at given path + */ + + private fun getJson(path: String): String { + // Load the JSON response + val uri = this.javaClass.classLoader?.getResource(path) + val file = File(uri?.path) + return String(file.readBytes()) } } diff --git a/app/src/test/resources/NewsApiResponse.json b/app/src/test/resources/NewsApiResponse.json new file mode 100644 index 0000000..e1b2265 --- /dev/null +++ b/app/src/test/resources/NewsApiResponse.json @@ -0,0 +1,2790 @@ +{ + "status": "OK", + "copyright": "Copyright (c) 2019 The New York Times Company. All Rights Reserved.", + "section": "home", + "last_updated": "2019-12-19T12:47:13-05:00", + "num_results": 35, + "results": [ + { + "section": "U.S.", + "subsection": "Politics", + "title": "Trump Impeached for Abuse of Power and Obstruction of Congress", + "abstract": "Voting nearly along party lines, the House approved two articles of impeachment against President Trump, making him the third president in history to face removal by the Senate.", + "url": "https://www.nytimes.com/2019/12/18/us/politics/trump-impeached.html", + "byline": "By NICHOLAS FANDOS and MICHAEL D. SHEAR", + "item_type": "Article", + "updated_date": "2019-12-19T10:45:06-05:00", + "created_date": "2019-12-18T13:50:38-05:00", + "published_date": "2019-12-18T13:50:38-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Impeachment", + "United States Politics and Government", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "Presidential Election of 2020", + "Russian Interference in 2016 US Elections and Ties to Trump Associates" + ], + "org_facet": [ + "House of Representatives", + "Democratic Party", + "Republican Party" + ], + "per_facet": [ + "Trump, Donald J", + "Pelosi, Nancy" + ], + "geo_facet": [], + "multimedia": [], + "short_url": "https://nyti.ms/34vl8TX" + }, + { + "section": "U.S.", + "subsection": "Politics", + "title": "Trump Impeachment Trial in Doubt as a House Leader Suggests Withholding Articles", + "abstract": "The comments by Representative James E. Clyburn, the No. 3 Democratic leader, cast further uncertainty on the path forward for a Senate trial of President Trump.", + "url": "https://www.nytimes.com/2019/12/19/us/politics/impeachment-trump-senate-trial.html", + "byline": "By NICHOLAS FANDOS and SHERYL GAY STOLBERG", + "item_type": "Article", + "updated_date": "2019-12-19T11:11:59-05:00", + "created_date": "2019-12-19T09:56:06-05:00", + "published_date": "2019-12-19T09:56:06-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry" + ], + "org_facet": [ + "Senate", + "House of Representatives" + ], + "per_facet": [ + "Clyburn, James E", + "McConnell, Mitch", + "Trump, Donald J", + "Pelosi, Nancy" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19dc-impeach/19dc-impeach-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Representative James Clyburn, Democrat of South Carolina, giving a television interview on Wednesday ahead of the House votes on articles of impeachment on Capitol Hill.", + "copyright": "Jason Andrew for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19dc-impeach/19dc-impeach-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Representative James Clyburn, Democrat of South Carolina, giving a television interview on Wednesday ahead of the House votes on articles of impeachment on Capitol Hill.", + "copyright": "Jason Andrew for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19dc-impeach/merlin_166138962_66a5ba8d-aaf7-4d25-bd01-8edd845ef6e4-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Representative James Clyburn, Democrat of South Carolina, giving a television interview on Wednesday ahead of the House votes on articles of impeachment on Capitol Hill.", + "copyright": "Jason Andrew for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19dc-impeach/merlin_166138962_66a5ba8d-aaf7-4d25-bd01-8edd845ef6e4-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Representative James Clyburn, Democrat of South Carolina, giving a television interview on Wednesday ahead of the House votes on articles of impeachment on Capitol Hill.", + "copyright": "Jason Andrew for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19dc-impeach/merlin_166138962_66a5ba8d-aaf7-4d25-bd01-8edd845ef6e4-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Representative James Clyburn, Democrat of South Carolina, giving a television interview on Wednesday ahead of the House votes on articles of impeachment on Capitol Hill.", + "copyright": "Jason Andrew for The New York Times" + } + ], + "short_url": "https://nyti.ms/34CU1GL" + }, + { + "section": "U.S.", + "subsection": "Politics", + "title": "A President Impeached, and a Nation Convulsed", + "abstract": "The impeachment battles over Andrew Johnson, Richard M. Nixon and Bill Clinton came at turning points in the American story. The time that produced President Trump has proved to be another one.", + "url": "https://www.nytimes.com/2019/12/18/us/politics/president-impeachment-history.html", + "byline": "By PETER BAKER", + "item_type": "Article", + "updated_date": "2019-12-19T10:48:24-05:00", + "created_date": "2019-12-18T22:14:47-05:00", + "published_date": "2019-12-18T22:14:47-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Impeachment", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "United States Politics and Government" + ], + "org_facet": [ + "House of Representatives", + "Democratic Party", + "Republican Party" + ], + "per_facet": [ + "Trump, Donald J", + "Johnson, Andrew", + "Nixon, Richard Milhous", + "Clinton, Bill" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-history1/merlin_166132113_48356d46-51a5-4d2a-af9e-bce836ba7940-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Linda Emerick with a copy of the Constitution during a demonstration in support of impeaching President Trump on Wednesday outside the Capitol.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-history1/merlin_166132113_48356d46-51a5-4d2a-af9e-bce836ba7940-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Linda Emerick with a copy of the Constitution during a demonstration in support of impeaching President Trump on Wednesday outside the Capitol.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-history1/merlin_166132113_48356d46-51a5-4d2a-af9e-bce836ba7940-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Linda Emerick with a copy of the Constitution during a demonstration in support of impeaching President Trump on Wednesday outside the Capitol.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-history1/merlin_166132113_48356d46-51a5-4d2a-af9e-bce836ba7940-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Linda Emerick with a copy of the Constitution during a demonstration in support of impeaching President Trump on Wednesday outside the Capitol.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-history1/merlin_166132113_48356d46-51a5-4d2a-af9e-bce836ba7940-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Linda Emerick with a copy of the Constitution during a demonstration in support of impeaching President Trump on Wednesday outside the Capitol.", + "copyright": "Alyssa Schukar for The New York Times" + } + ], + "short_url": "https://nyti.ms/36ZTTCX" + }, + { + "section": "U.S.", + "subsection": "Politics", + "title": "Trump, Unbowed, Uses Rally to Strike Back Against Impeachment Vote", + "abstract": "The president traveled to Michigan, a vital electoral state, to deliver his response after he became the third president to be impeached by the House.", + "url": "https://www.nytimes.com/2019/12/18/us/politics/Debbie-Dingell-husband.html", + "byline": "By MICHAEL CROWLEY, ANNIE KARNI and MAGGIE HABERMAN", + "item_type": "Article", + "updated_date": "2019-12-19T11:32:05-05:00", + "created_date": "2019-12-18T20:23:25-05:00", + "published_date": "2019-12-18T20:23:25-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry" + ], + "org_facet": [ + "House of Representatives", + "Republican Party" + ], + "per_facet": [ + "Trump, Donald J", + "Pence, Mike" + ], + "geo_facet": [ + "Michigan" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-trump-2/18dc-trump-2-thumbStandard-v4.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Supporters of Mr. Trump at the rally in Battle Creek, Mich.", + "copyright": "Pete Marovich for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-trump-2/18dc-trump-2-thumbLarge-v4.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Supporters of Mr. Trump at the rally in Battle Creek, Mich.", + "copyright": "Pete Marovich for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-trump-2/18dc-trump-2-articleInline-v4.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Supporters of Mr. Trump at the rally in Battle Creek, Mich.", + "copyright": "Pete Marovich for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-trump-2/18dc-trump-2-mediumThreeByTwo210-v4.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Supporters of Mr. Trump at the rally in Battle Creek, Mich.", + "copyright": "Pete Marovich for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/politics/18dc-trump-2/18dc-trump-2-superJumbo-v4.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Supporters of Mr. Trump at the rally in Battle Creek, Mich.", + "copyright": "Pete Marovich for The New York Times" + } + ], + "short_url": "https://nyti.ms/2M9jy3X" + }, + { + "section": "Business", + "subsection": "Media", + "title": "How TV Covered the Moment of Impeachment", + "abstract": "Tucker Carlson was grim. Sean Hannity was angry. Two networks seemed reluctant to leave their scheduled prime-time shows.", + "url": "https://www.nytimes.com/2019/12/18/business/media/cnn-msnbc-fox-news-trump-impeachment.html", + "byline": "By JIM WINDOLF", + "item_type": "Article", + "updated_date": "2019-12-18T21:49:25-05:00", + "created_date": "2019-12-18T21:49:26-05:00", + "published_date": "2019-12-18T21:49:26-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "News and News Media", + "Television", + "Impeachment", + "Survivor (TV Program)", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry" + ], + "org_facet": [ + "CBS Corporation", + "ABC Inc", + "House of Representatives", + "National Broadcasting Co", + "Fox News Channel" + ], + "per_facet": [ + "Carlson, Tucker", + "Hannity, Sean", + "Trump, Donald J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18impeachtv/18impeachtv-thumbStandard-v2.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Daniel Sidzina watching the House impeachment debate on Wednesday at Shaw’s Tavern in Washington.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18impeachtv/18impeachtv-thumbLarge-v2.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Daniel Sidzina watching the House impeachment debate on Wednesday at Shaw’s Tavern in Washington.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18impeachtv/18impeachtv-articleInline-v2.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Daniel Sidzina watching the House impeachment debate on Wednesday at Shaw’s Tavern in Washington.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18impeachtv/18impeachtv-mediumThreeByTwo210-v3.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Daniel Sidzina watching the House impeachment debate on Wednesday at Shaw’s Tavern in Washington.", + "copyright": "Alyssa Schukar for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18impeachtv/18impeachtv-superJumbo-v2.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Daniel Sidzina watching the House impeachment debate on Wednesday at Shaw’s Tavern in Washington.", + "copyright": "Alyssa Schukar for The New York Times" + } + ], + "short_url": "https://nyti.ms/34CIAyE" + }, + { + "section": "World", + "subsection": "Europe", + "title": "Putin Hints at Holding Power Past 2024, and Defends Trump on Impeachment", + "abstract": "Russia’s president mused about repealing the term limit he faces, and echoed Republican talking points saying that impeachment was a baseless bid to reverse the 2016 election.", + "url": "https://www.nytimes.com/2019/12/19/world/europe/putin-trump-impeachment.html", + "byline": "By ANDREW HIGGINS", + "item_type": "Article", + "updated_date": "2019-12-19T12:44:39-05:00", + "created_date": "2019-12-19T07:30:27-05:00", + "published_date": "2019-12-19T07:30:27-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "United States Politics and Government", + "Russian Interference in 2016 US Elections and Ties to Trump Associates" + ], + "org_facet": [], + "per_facet": [ + "Putin, Vladimir V", + "Trump, Donald J" + ], + "geo_facet": [ + "Moscow (Russia)" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19putin1/19putin1-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "President Vladimir V. Putin said at a news conference in Moscow on Thursday that the United States Senate was unlikely to remove President Trump from office.", + "copyright": "Evgenia Novozhenina/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19putin1/19putin1-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "President Vladimir V. Putin said at a news conference in Moscow on Thursday that the United States Senate was unlikely to remove President Trump from office.", + "copyright": "Evgenia Novozhenina/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19putin1/merlin_166176633_8c6e0c90-21c6-4433-990a-3f01dd710b8c-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "President Vladimir V. Putin said at a news conference in Moscow on Thursday that the United States Senate was unlikely to remove President Trump from office.", + "copyright": "Evgenia Novozhenina/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19putin1/19putin1-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "President Vladimir V. Putin said at a news conference in Moscow on Thursday that the United States Senate was unlikely to remove President Trump from office.", + "copyright": "Evgenia Novozhenina/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19putin1/merlin_166176633_8c6e0c90-21c6-4433-990a-3f01dd710b8c-superJumbo.jpg", + "format": "superJumbo", + "height": 1368, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "President Vladimir V. Putin said at a news conference in Moscow on Thursday that the United States Senate was unlikely to remove President Trump from office.", + "copyright": "Evgenia Novozhenina/Reuters" + } + ], + "short_url": "https://nyti.ms/371bnyP" + }, + { + "section": "New York", + "subsection": "", + "title": "How 2 Soviet Émigrés Fueled the Trump Impeachment Flames", + "abstract": "“Lev and Igor” were obscure businessmen who became fixtures of the Republican donor set. Then they played an unlikely role in the proceedings gripping the nation.", + "url": "https://www.nytimes.com/2019/12/19/nyregion/lev-parnas-igor-fruman.html", + "byline": "By MICHAEL ROTHFELD, BEN PROTESS, WILLIAM K. RASHBAUM, KENNETH P. VOGEL and ANDREW E. KRAMER", + "item_type": "Article", + "updated_date": "2019-12-19T09:28:38-05:00", + "created_date": "2019-12-19T03:00:12-05:00", + "published_date": "2019-12-19T03:00:12-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Impeachment", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "United States Politics and Government", + "United States International Relations", + "Russian Interference in 2016 US Elections and Ties to Trump Associates" + ], + "org_facet": [], + "per_facet": [ + "Parnas, Lev", + "Fruman, Igor", + "Giuliani, Rudolph W", + "Trump, Donald J", + "Biden, Joseph R Jr", + "Yovanovitch, Marie L" + ], + "geo_facet": [ + "Ukraine" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/nyregion/19-PARNUS-FRUMAN-01-PRINT/parnas-fruman-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Photo illustration by Najeebah Al-Ghadban" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/nyregion/19-PARNUS-FRUMAN-01-PRINT/parnas-fruman-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Photo illustration by Najeebah Al-Ghadban" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/nyregion/19-PARNUS-FRUMAN-01-PRINT/parnas-fruman-articleInline.jpg", + "format": "Normal", + "height": 246, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Photo illustration by Najeebah Al-Ghadban" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/nyregion/19-PARNUS-FRUMAN-01-PRINT/19-PARNUS-FRUMAN-01-PRINT-mediumThreeByTwo210-v3.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Photo illustration by Najeebah Al-Ghadban" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/nyregion/19-PARNUS-FRUMAN-01-PRINT/parnas-fruman-superJumbo.jpg", + "format": "superJumbo", + "height": 2048, + "width": 1583, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Photo illustration by Najeebah Al-Ghadban" + } + ], + "short_url": "https://nyti.ms/2EyYCiw" + }, + { + "section": "U.S.", + "subsection": "Politics", + "title": "Tonight’s Democratic Debate: When It Is and What to Watch For", + "abstract": "Everything you need to know about the 2020 Democratic presidential debate in Los Angeles.", + "url": "https://www.nytimes.com/2019/12/19/us/politics/when-december-democratic-debate.html", + "byline": "By SHANE GOLDMACHER", + "item_type": "Article", + "updated_date": "2019-12-19T09:00:08-05:00", + "created_date": "2019-12-19T09:00:07-05:00", + "published_date": "2019-12-19T09:00:07-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Presidential Election of 2020", + "Debates (Political)" + ], + "org_facet": [], + "per_facet": [ + "Biden, Joseph R Jr", + "Buttigieg, Pete (1982- )", + "Warren, Elizabeth", + "Sanders, Bernard" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19whattowatch/19whattowatch-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "The Democratic debate will take place at Loyola Marymount University in Los Angeles.", + "copyright": "Jenna Schoenefeld for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19whattowatch/19whattowatch-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "The Democratic debate will take place at Loyola Marymount University in Los Angeles.", + "copyright": "Jenna Schoenefeld for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19whattowatch/merlin_166056141_4010ba09-7f2d-48e2-b131-0bca452db4ba-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "The Democratic debate will take place at Loyola Marymount University in Los Angeles.", + "copyright": "Jenna Schoenefeld for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19whattowatch/merlin_166056141_4010ba09-7f2d-48e2-b131-0bca452db4ba-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "The Democratic debate will take place at Loyola Marymount University in Los Angeles.", + "copyright": "Jenna Schoenefeld for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19whattowatch/merlin_166056141_4010ba09-7f2d-48e2-b131-0bca452db4ba-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "The Democratic debate will take place at Loyola Marymount University in Los Angeles.", + "copyright": "Jenna Schoenefeld for The New York Times" + } + ], + "short_url": "https://nyti.ms/2PCro8p" + }, + { + "section": "U.S.", + "subsection": "Politics", + "title": "Andrew Yang Is Onstage, but Offstage, Asian-Americans Wonder Where They Fit In", + "abstract": "The Democrats have a historically diverse field, but the Asian-American entrepreneur will be debating with six white candidates.", + "url": "https://www.nytimes.com/2019/12/19/us/politics/Andrew-Yang-2020-Democrats-Debate.html", + "byline": "By JENNIFER MEDINA and MATT STEVENS", + "item_type": "Article", + "updated_date": "2019-12-19T09:26:34-05:00", + "created_date": "2019-12-19T03:00:14-05:00", + "published_date": "2019-12-19T03:00:14-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Race and Ethnicity", + "Debates (Political)", + "Asian-Americans", + "Presidential Election of 2020" + ], + "org_facet": [], + "per_facet": [ + "Yang, Andrew (1975- )" + ], + "geo_facet": [ + "Los Angeles (Calif)" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19asians-01/19asians-01-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Andrew Yang gets a photo with an audience member after his town hall in Dover, New Hampshire in November.", + "copyright": "Sarah Rice for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19asians-01/19asians-01-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Andrew Yang gets a photo with an audience member after his town hall in Dover, New Hampshire in November.", + "copyright": "Sarah Rice for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19asians-01/merlin_164030079_7b92d94e-54cc-48b5-afbb-ca5144e96082-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Andrew Yang gets a photo with an audience member after his town hall in Dover, New Hampshire in November.", + "copyright": "Sarah Rice for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19asians-01/merlin_164030079_7b92d94e-54cc-48b5-afbb-ca5144e96082-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Andrew Yang gets a photo with an audience member after his town hall in Dover, New Hampshire in November.", + "copyright": "Sarah Rice for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/politics/19asians-01/merlin_164030079_7b92d94e-54cc-48b5-afbb-ca5144e96082-superJumbo.jpg", + "format": "superJumbo", + "height": 1366, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Andrew Yang gets a photo with an audience member after his town hall in Dover, New Hampshire in November.", + "copyright": "Sarah Rice for The New York Times" + } + ], + "short_url": "https://nyti.ms/2Z0STeU" + }, + { + "section": "Health", + "subsection": "", + "title": "Obamacare Insurance Mandate Is Struck Down by Federal Appeals Court", + "abstract": "But the judges sent the case back to determine if other parts of the federal health care law can stand without the mandate.", + "url": "https://www.nytimes.com/2019/12/18/health/obamacare-mandate.html", + "byline": "By ABBY GOODNOUGH", + "item_type": "Article", + "updated_date": "2019-12-19T12:17:28-05:00", + "created_date": "2019-12-18T17:16:22-05:00", + "published_date": "2019-12-18T17:16:22-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Patient Protection and Affordable Care Act (2010)", + "Health Insurance and Managed Care", + "Decisions and Verdicts", + "Appeals Courts (US)", + "United States Politics and Government", + "Law and Legislation", + "Tax Cuts and Jobs Act (2017)", + "Suits and Litigation (Civil)" + ], + "org_facet": [], + "per_facet": [ + "O'Connor, Reed", + "Trump, Donald J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/science/18OBAMACARE1/18OBAMACARE1-thumbStandard-v2.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "A storefront of Sunshine Health and Life Advisors, a Florida insurance enrollment company, in Miami in November 2016.", + "copyright": "Angel Valentin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/science/18OBAMACARE1/18OBAMACARE1-thumbLarge-v2.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "A storefront of Sunshine Health and Life Advisors, a Florida insurance enrollment company, in Miami in November 2016.", + "copyright": "Angel Valentin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/science/18OBAMACARE1/18OBAMACARE1-articleInline-v2.jpg", + "format": "Normal", + "height": 126, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "A storefront of Sunshine Health and Life Advisors, a Florida insurance enrollment company, in Miami in November 2016.", + "copyright": "Angel Valentin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/science/18OBAMACARE1/18OBAMACARE1-mediumThreeByTwo210-v2.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "A storefront of Sunshine Health and Life Advisors, a Florida insurance enrollment company, in Miami in November 2016.", + "copyright": "Angel Valentin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/science/18OBAMACARE1/18OBAMACARE1-superJumbo-v2.jpg", + "format": "superJumbo", + "height": 1363, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "A storefront of Sunshine Health and Life Advisors, a Florida insurance enrollment company, in Miami in November 2016.", + "copyright": "Angel Valentin for The New York Times" + } + ], + "short_url": "https://nyti.ms/2Q5Fnmi" + }, + { + "section": "The Upshot", + "subsection": "", + "title": "Obamacare Ruling May Spare Republicans Some Political Pain", + "abstract": "The practical effect of the decision is likely to be months of delays, pushing the final outcome of the case beyond the 2020 election.", + "url": "https://www.nytimes.com/2019/12/19/upshot/obamacare-ruling.html", + "byline": "By MARGOT SANGER-KATZ", + "item_type": "Article", + "updated_date": "2019-12-19T12:37:28-05:00", + "created_date": "2019-12-19T05:02:46-05:00", + "published_date": "2019-12-19T05:02:46-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Patient Protection and Affordable Care Act (2010)", + "Presidential Election of 2020", + "United States Politics and Government", + "Health Insurance and Managed Care", + "Law and Legislation" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/upshot/00up-aca-ruling/merlin_157723173_d9eb07de-7bfe-4211-98da-dfb836219ca7-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "The public lined up in July to watch oral arguments in Texas v. U.S. at the United States Court of Appeals for the Fifth Circuit in New Orleans. ", + "copyright": "Annie Flanagan for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/upshot/00up-aca-ruling/merlin_157723173_d9eb07de-7bfe-4211-98da-dfb836219ca7-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "The public lined up in July to watch oral arguments in Texas v. U.S. at the United States Court of Appeals for the Fifth Circuit in New Orleans. ", + "copyright": "Annie Flanagan for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/upshot/00up-aca-ruling/merlin_157723173_d9eb07de-7bfe-4211-98da-dfb836219ca7-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "The public lined up in July to watch oral arguments in Texas v. U.S. at the United States Court of Appeals for the Fifth Circuit in New Orleans. ", + "copyright": "Annie Flanagan for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/upshot/00up-aca-ruling/merlin_157723173_d9eb07de-7bfe-4211-98da-dfb836219ca7-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "The public lined up in July to watch oral arguments in Texas v. U.S. at the United States Court of Appeals for the Fifth Circuit in New Orleans. ", + "copyright": "Annie Flanagan for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/upshot/00up-aca-ruling/merlin_157723173_d9eb07de-7bfe-4211-98da-dfb836219ca7-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "The public lined up in July to watch oral arguments in Texas v. U.S. at the United States Court of Appeals for the Fifth Circuit in New Orleans. ", + "copyright": "Annie Flanagan for The New York Times" + } + ], + "short_url": "https://nyti.ms/2EAsMC6" + }, + { + "section": "Opinion", + "subsection": "", + "title": "Trump Has Been Impeached. Republicans Are Following Him Down.", + "abstract": "Ignoring facts and trashing the impeachment process is no way to protect democracy.", + "url": "https://www.nytimes.com/2019/12/18/opinion/trump-impeachment-vote.html", + "byline": "By THE EDITORIAL BOARD", + "item_type": "Article", + "updated_date": "2019-12-19T10:10:44-05:00", + "created_date": "2019-12-18T20:58:28-05:00", + "published_date": "2019-12-18T20:58:28-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Impeachment", + "Constitution (US)", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "United States Politics and Government" + ], + "org_facet": [ + "Republican Party", + "House of Representatives", + "Senate" + ], + "per_facet": [ + "Trump, Donald J", + "McConnell, Mitch" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/opinion/18impeachNew/18impeachNew-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/opinion/18impeachNew/18impeachNew-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/opinion/18impeachNew/18impeachNew-articleInline.jpg", + "format": "Normal", + "height": 131, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/opinion/18impeachNew/18impeachNew-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/opinion/18impeachNew/18impeachNew-superJumbo.jpg", + "format": "superJumbo", + "height": 1415, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Damon Winter/The New York Times" + } + ], + "short_url": "https://nyti.ms/2S67wfn" + }, + { + "section": "Opinion", + "subsection": "", + "title": "Cybersecurity Experts Are Leaving the Federal Government. That’s a Problem.", + "abstract": "The departures leave our critical infrastructure, elections, data and networks vulnerable.", + "url": "https://www.nytimes.com/2019/12/19/opinion/cybersecurity-departures-government.html", + "byline": "By JOSEPHINE WOLFF", + "item_type": "Article", + "updated_date": "2019-12-19T11:30:49-05:00", + "created_date": "2019-12-19T11:30:49-05:00", + "published_date": "2019-12-19T11:30:49-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Cyberwarfare and Defense", + "Computer Security", + "Computers and the Internet", + "United States Politics and Government", + "Appointments and Executive Changes", + "Infrastructure (Public Works)" + ], + "org_facet": [ + "Defense Department", + "Homeland Security Department", + "National Security Council" + ], + "per_facet": [], + "geo_facet": [ + "United States" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19Wolff/19Wolff-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Bill Hinton/Moment, via Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19Wolff/19Wolff-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Bill Hinton/Moment, via Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19Wolff/19Wolff-articleInline.jpg", + "format": "Normal", + "height": 126, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Bill Hinton/Moment, via Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19Wolff/19Wolff-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Bill Hinton/Moment, via Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19Wolff/19Wolff-superJumbo.jpg", + "format": "superJumbo", + "height": 1363, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Bill Hinton/Moment, via Getty Images" + } + ], + "short_url": "https://nyti.ms/2Z5T4W9" + }, + { + "section": "Opinion", + "subsection": "", + "title": "Will Impeachment Drive Trump Batty?", + "abstract": "Check the belfry. Maybe things could get worse.", + "url": "https://www.nytimes.com/2019/12/18/opinion/trump-house-impeachment.html", + "byline": "By GAIL COLLINS", + "item_type": "Article", + "updated_date": "2019-12-18T21:33:25-05:00", + "created_date": "2019-12-18T21:33:25-05:00", + "published_date": "2019-12-18T21:33:25-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Impeachment", + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "United States Politics and Government" + ], + "org_facet": [ + "House of Representatives", + "Democratic Party", + "Republican Party" + ], + "per_facet": [ + "Trump, Donald J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19impeach_editorial_4/19impeach_editorial_4-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "President Trump at the White House on Wednesday.", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19impeach_editorial_4/19impeach_editorial_4-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "President Trump at the White House on Wednesday.", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19impeach_editorial_4/merlin_166154874_6c4fbbd2-ea29-480c-abc1-1f4678793707-articleInline.jpg", + "format": "Normal", + "height": 129, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "President Trump at the White House on Wednesday.", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19impeach_editorial_4/19impeach_editorial_4-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "President Trump at the White House on Wednesday.", + "copyright": "Damon Winter/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19impeach_editorial_4/merlin_166154874_6c4fbbd2-ea29-480c-abc1-1f4678793707-superJumbo.jpg", + "format": "superJumbo", + "height": 1389, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "President Trump at the White House on Wednesday.", + "copyright": "Damon Winter/The New York Times" + } + ], + "short_url": "https://nyti.ms/35Fw0A8" + }, + { + "section": "Opinion", + "subsection": "", + "title": "Trump’s Scary Precedent: Scorning Congress", + "abstract": "The Ukraine charge gets all the attention, but the article of impeachment about obstruction is just as urgent.", + "url": "https://www.nytimes.com/2019/12/19/opinion/impeachment-article-2-trump.html", + "byline": "By KEITH E. WHITTINGTON", + "item_type": "Article", + "updated_date": "2019-12-19T11:00:07-05:00", + "created_date": "2019-12-19T11:00:07-05:00", + "published_date": "2019-12-19T11:00:07-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Trump-Ukraine Whistle-Blower Complaint and Impeachment Inquiry", + "Constitution (US)", + "Impeachment" + ], + "org_facet": [ + "House of Representatives", + "Senate" + ], + "per_facet": [ + "Trump, Donald J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19whittington/19Nasr1-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "A House Judiciary Committee impeachment hearing on presidential obstruction on Capitol Hill in Washington.", + "copyright": "Michael Reynolds/EPA, via Shutterstock" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19whittington/19Nasr1-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "A House Judiciary Committee impeachment hearing on presidential obstruction on Capitol Hill in Washington.", + "copyright": "Michael Reynolds/EPA, via Shutterstock" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19whittington/merlin_160965657_84ed8b98-3658-4af7-a6a0-bb47358aaf41-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "A House Judiciary Committee impeachment hearing on presidential obstruction on Capitol Hill in Washington.", + "copyright": "Michael Reynolds/EPA, via Shutterstock" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19whittington/merlin_160965657_84ed8b98-3658-4af7-a6a0-bb47358aaf41-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "A House Judiciary Committee impeachment hearing on presidential obstruction on Capitol Hill in Washington.", + "copyright": "Michael Reynolds/EPA, via Shutterstock" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/opinion/19whittington/merlin_160965657_84ed8b98-3658-4af7-a6a0-bb47358aaf41-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "A House Judiciary Committee impeachment hearing on presidential obstruction on Capitol Hill in Washington.", + "copyright": "Michael Reynolds/EPA, via Shutterstock" + } + ], + "short_url": "https://nyti.ms/2Z3ANsw" + }, + { + "section": "Technology", + "subsection": "", + "title": "Where Are the Tech Zillionaires? San Francisco Faces the I.P.O. Fizzle", + "abstract": "All those tech I.P.O.s this year that were supposed to make people megarich only made them rich-ish.", + "url": "https://www.nytimes.com/2019/12/19/technology/tech-IPO-san-francisco.html", + "byline": "By NELLIE BOWLES and KATE CONGER", + "item_type": "Article", + "updated_date": "2019-12-19T12:26:13-05:00", + "created_date": "2019-12-19T10:03:43-05:00", + "published_date": "2019-12-19T10:03:43-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Real Estate and Housing (Residential)", + "Initial Public Offerings", + "Stocks and Bonds", + "High Net Worth Individuals", + "Computers and the Internet", + "Start-ups", + "Organized Labor", + "Venture Capital", + "Luxury Goods and Services" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [ + "San Francisco (Calif)", + "Silicon Valley (Calif)" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18FIZZLE/18FIZZLE-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Filippo Fontana" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18FIZZLE/18FIZZLE-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Filippo Fontana" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18FIZZLE/18FIZZLE-articleInline.jpg", + "format": "Normal", + "height": 211, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Filippo Fontana" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18FIZZLE/18FIZZLE-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Filippo Fontana" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18FIZZLE/18FIZZLE-superJumbo.jpg", + "format": "superJumbo", + "height": 2048, + "width": 1844, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Filippo Fontana" + } + ], + "short_url": "https://nyti.ms/35JXRzm" + }, + { + "section": "U.S.", + "subsection": "", + "title": "A Lonely Plea: ‘Anybody Need a Grandma for Christmas?’", + "abstract": "A woman from Tulsa, Okla., with no place to go for the holidays became a painful reminder of the isolation felt by many older Americans.", + "url": "https://www.nytimes.com/2019/12/19/us/grandma-for-christmas.html", + "byline": "By MARIA CRAMER", + "item_type": "Article", + "updated_date": "2019-12-19T11:00:09-05:00", + "created_date": "2019-12-19T11:00:10-05:00", + "published_date": "2019-12-19T11:00:10-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Elderly", + "Elder Abuse", + "Social Media", + "Christmas", + "Holidays and Special Occasions" + ], + "org_facet": [ + "Craigslist" + ], + "per_facet": [ + "Carlock, Carson" + ], + "geo_facet": [ + "Tulsa (Okla)" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00xp-grandma/00xp-grandma-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "A man in Tulsa took a screenshot of this Craigslist ad and posted it on Facebook on Dec. 11 with the hashtag “FINDGRANDMA.”", + "copyright": "Craigslist" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00xp-grandma/00xp-grandma-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "A man in Tulsa took a screenshot of this Craigslist ad and posted it on Facebook on Dec. 11 with the hashtag “FINDGRANDMA.”", + "copyright": "Craigslist" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00xp-grandma/00xp-grandma-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "A man in Tulsa took a screenshot of this Craigslist ad and posted it on Facebook on Dec. 11 with the hashtag “FINDGRANDMA.”", + "copyright": "Craigslist" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00xp-grandma/00xp-grandma-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "A man in Tulsa took a screenshot of this Craigslist ad and posted it on Facebook on Dec. 11 with the hashtag “FINDGRANDMA.”", + "copyright": "Craigslist" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00xp-grandma/00xp-grandma-superJumbo.jpg", + "format": "superJumbo", + "height": 763, + "width": 1146, + "type": "image", + "subtype": "photo", + "caption": "A man in Tulsa took a screenshot of this Craigslist ad and posted it on Facebook on Dec. 11 with the hashtag “FINDGRANDMA.”", + "copyright": "Craigslist" + } + ], + "short_url": "https://nyti.ms/2Z6yxRs" + }, + { + "section": "U.S.", + "subsection": "", + "title": "Sackler Family Members Fight Removal of Name at Tufts, Calling It a ‘Breach’", + "abstract": "After Tufts took the Sackler name off one of its buildings over the family’s role in the opioid crisis, some family members are crying foul.", + "url": "https://www.nytimes.com/2019/12/19/us/sackler-opioids-tufts.html", + "byline": "By KATE TAYLOR", + "item_type": "Article", + "updated_date": "2019-12-19T11:56:17-05:00", + "created_date": "2019-12-19T10:58:24-05:00", + "published_date": "2019-12-19T10:58:24-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Opioids and Opiates" + ], + "org_facet": [ + "Tufts University" + ], + "per_facet": [ + "Sackler Family" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/us/19SACKLER/19SACKLER-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "The Sackler name was removed earlier this month from buildings on the Tufts Medical Center campus in Boston.", + "copyright": "Cody O'Loughlin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/19SACKLER/19SACKLER-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "The Sackler name was removed earlier this month from buildings on the Tufts Medical Center campus in Boston.", + "copyright": "Cody O'Loughlin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/19SACKLER/merlin_165484488_ec6318be-ceeb-49f7-90b5-e0b546251197-articleInline.jpg", + "format": "Normal", + "height": 152, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "The Sackler name was removed earlier this month from buildings on the Tufts Medical Center campus in Boston.", + "copyright": "Cody O'Loughlin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/19SACKLER/19SACKLER-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "The Sackler name was removed earlier this month from buildings on the Tufts Medical Center campus in Boston.", + "copyright": "Cody O'Loughlin for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/us/19SACKLER/merlin_165484488_ec6318be-ceeb-49f7-90b5-e0b546251197-superJumbo.jpg", + "format": "superJumbo", + "height": 1638, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "The Sackler name was removed earlier this month from buildings on the Tufts Medical Center campus in Boston.", + "copyright": "Cody O'Loughlin for The New York Times" + } + ], + "short_url": "https://nyti.ms/2M9tCd2" + }, + { + "section": "World", + "subsection": "Europe", + "title": "Shooting Erupts at Russia Spy Agency’s Moscow Headquarters", + "abstract": "Russian news reports said up to three people were killed in a shooting in or near the reception area of the Federal Security Service headquarters in central Moscow.", + "url": "https://www.nytimes.com/2019/12/19/world/europe/fsb-headquarters-shooting-russia.html", + "byline": "By ANDREW HIGGINS and IVAN NECHEPURENKO", + "item_type": "Article", + "updated_date": "2019-12-19T12:34:37-05:00", + "created_date": "2019-12-19T11:01:01-05:00", + "published_date": "2019-12-19T11:01:01-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [], + "org_facet": [ + "Federal Security Service" + ], + "per_facet": [], + "geo_facet": [ + "Moscow (Russia)" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19moscow-sub3/19moscow-sub3-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Police outside the Federal Security Service building in Moscow on Thursday.", + "copyright": "Shamil Zhumatov/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19moscow-sub3/19moscow-sub3-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Police outside the Federal Security Service building in Moscow on Thursday.", + "copyright": "Shamil Zhumatov/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19moscow-sub3/merlin_166186656_37350ec3-1d9f-4c90-9c92-8dd1271faa1c-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Police outside the Federal Security Service building in Moscow on Thursday.", + "copyright": "Shamil Zhumatov/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19moscow-sub3/merlin_166186656_37350ec3-1d9f-4c90-9c92-8dd1271faa1c-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Police outside the Federal Security Service building in Moscow on Thursday.", + "copyright": "Shamil Zhumatov/Reuters" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19moscow-sub3/merlin_166186656_37350ec3-1d9f-4c90-9c92-8dd1271faa1c-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Police outside the Federal Security Service building in Moscow on Thursday.", + "copyright": "Shamil Zhumatov/Reuters" + } + ], + "short_url": "https://nyti.ms/2McIibp" + }, + { + "section": "Business", + "subsection": "", + "title": "Goldman Sachs Is in Talks to Settle Malaysia Fund Scandal", + "abstract": "A settlement with federal prosecutors could be reached as soon as January.", + "url": "https://www.nytimes.com/2019/12/19/business/goldman-sachs-1mdb.html", + "byline": "By EMILY FLITTER and MATTHEW GOLDSTEIN", + "item_type": "Article", + "updated_date": "2019-12-19T11:45:51-05:00", + "created_date": "2019-12-19T09:45:14-05:00", + "published_date": "2019-12-19T09:45:14-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Suits and Litigation (Civil)", + "Sovereign Wealth Funds", + "Fines (Penalties)", + "Bribery and Kickbacks" + ], + "org_facet": [ + "1Malaysia Development Berhad (1MDB)", + "Goldman Sachs Group Inc" + ], + "per_facet": [ + "Low Jho (1981- )", + "Leissner, Tim" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/business/19goldman2/19goldman2-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Demonstrators held pictures of Mr. Low and a dummy of his luxury yacht Equanimity during a protest in Kuala Lumpur, Malaysia.", + "copyright": "Sadiq Asyraf/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/business/19goldman2/19goldman2-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Demonstrators held pictures of Mr. Low and a dummy of his luxury yacht Equanimity during a protest in Kuala Lumpur, Malaysia.", + "copyright": "Sadiq Asyraf/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/business/19goldman2/merlin_136838070_34fbbedf-a5de-4018-b54b-9afa8bb13d55-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Demonstrators held pictures of Mr. Low and a dummy of his luxury yacht Equanimity during a protest in Kuala Lumpur, Malaysia.", + "copyright": "Sadiq Asyraf/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/business/19goldman2/19goldman2-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Demonstrators held pictures of Mr. Low and a dummy of his luxury yacht Equanimity during a protest in Kuala Lumpur, Malaysia.", + "copyright": "Sadiq Asyraf/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/business/19goldman2/merlin_136838070_34fbbedf-a5de-4018-b54b-9afa8bb13d55-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Demonstrators held pictures of Mr. Low and a dummy of his luxury yacht Equanimity during a protest in Kuala Lumpur, Malaysia.", + "copyright": "Sadiq Asyraf/Associated Press" + } + ], + "short_url": "https://nyti.ms/34wgzJe" + }, + { + "section": "Technology", + "subsection": "", + "title": "Uber Settles Federal Investigation Into Workplace Culture", + "abstract": "The ride-hailing company “permitted a culture of sexual harassment and retaliation,” the Equal Employment Opportunity Commission found.", + "url": "https://www.nytimes.com/2019/12/18/technology/uber-settles-eeoc-investigation-workplace-culture.html", + "byline": "By KATE CONGER", + "item_type": "Article", + "updated_date": "2019-12-19T12:07:38-05:00", + "created_date": "2019-12-18T17:45:36-05:00", + "published_date": "2019-12-18T17:45:36-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Sexual Harassment", + "Car Services and Livery Cabs", + "Workplace Hazards and Violations", + "Computers and the Internet" + ], + "org_facet": [ + "Uber Technologies Inc", + "Equal Employment Opportunity Commission" + ], + "per_facet": [ + "Khosrowshahi, Dara", + "Kalanick, Travis", + "Fowler, Susan J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18uber/18uber-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "The Uber headquarters in San Francisco. The company will start a $4.4 million fund to pay current and former employees who were sexually harassed at work.", + "copyright": "Sarahbeth Maney for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18uber/18uber-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "The Uber headquarters in San Francisco. The company will start a $4.4 million fund to pay current and former employees who were sexually harassed at work.", + "copyright": "Sarahbeth Maney for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18uber/merlin_157173588_7f1ef397-2c42-4eff-bda1-2f7976afaf8a-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "The Uber headquarters in San Francisco. The company will start a $4.4 million fund to pay current and former employees who were sexually harassed at work.", + "copyright": "Sarahbeth Maney for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18uber/18uber-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "The Uber headquarters in San Francisco. The company will start a $4.4 million fund to pay current and former employees who were sexually harassed at work.", + "copyright": "Sarahbeth Maney for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/business/18uber/merlin_157173588_7f1ef397-2c42-4eff-bda1-2f7976afaf8a-superJumbo.jpg", + "format": "superJumbo", + "height": 1366, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "The Uber headquarters in San Francisco. The company will start a $4.4 million fund to pay current and former employees who were sexually harassed at work.", + "copyright": "Sarahbeth Maney for The New York Times" + } + ], + "short_url": "https://nyti.ms/2M8Tfuu" + }, + { + "section": "World", + "subsection": "Asia Pacific", + "title": "Indonesia Lets Plastic Burning Continue Despite Warning on Toxins", + "abstract": "The Indonesian government pushed back on an international study that found high levels of dioxin in a village where plastic is burned to produce tofu.", + "url": "https://www.nytimes.com/2019/12/19/world/asia/indonesia-dioxin-plastic-tofu.html", + "byline": "By RICHARD C. PADDOCK", + "item_type": "Article", + "updated_date": "2019-12-19T04:29:18-05:00", + "created_date": "2019-12-19T02:54:39-05:00", + "published_date": "2019-12-19T02:54:39-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Plastics", + "Dioxin", + "Waste Materials and Disposal", + "Tofu", + "Environment" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19indonesia-toxin-1/19indonesia-toxin-1-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Black smoke, caused by burning plastic as fuel at a tofu factory, is seen in Tropodo, Indonesia, in November.", + "copyright": "Ulet Ifansasti for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19indonesia-toxin-1/19indonesia-toxin-1-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Black smoke, caused by burning plastic as fuel at a tofu factory, is seen in Tropodo, Indonesia, in November.", + "copyright": "Ulet Ifansasti for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19indonesia-toxin-1/merlin_163928940_8a6409cc-c6ba-4063-87b2-d695acb1a3f2-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Black smoke, caused by burning plastic as fuel at a tofu factory, is seen in Tropodo, Indonesia, in November.", + "copyright": "Ulet Ifansasti for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19indonesia-toxin-1/merlin_163928940_8a6409cc-c6ba-4063-87b2-d695acb1a3f2-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Black smoke, caused by burning plastic as fuel at a tofu factory, is seen in Tropodo, Indonesia, in November.", + "copyright": "Ulet Ifansasti for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19indonesia-toxin-1/merlin_163928940_8a6409cc-c6ba-4063-87b2-d695acb1a3f2-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Black smoke, caused by burning plastic as fuel at a tofu factory, is seen in Tropodo, Indonesia, in November.", + "copyright": "Ulet Ifansasti for The New York Times" + } + ], + "short_url": "https://nyti.ms/2rbzJXe" + }, + { + "section": "World", + "subsection": "Asia Pacific", + "title": "‘Why My Baby?’: How Measles Robbed Samoa of Its Young", + "abstract": "When the virus arrived on its shores, the Pacific island nation was grievously unprepared. It had left the door to contagion wide open, and thousands of children have suffered.", + "url": "https://www.nytimes.com/2019/12/19/world/asia/samoa-measles.html", + "byline": "By ISABELLA KWAI and MATTHEW ABBOTT", + "item_type": "Article", + "updated_date": "2019-12-19T06:03:12-05:00", + "created_date": "2019-12-19T05:29:07-05:00", + "published_date": "2019-12-19T05:29:07-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Measles", + "Vaccination and Immunization", + "Epidemics" + ], + "org_facet": [], + "per_facet": [ + "Kennedy, Robert F Jr" + ], + "geo_facet": [ + "Samoa", + "Australia" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19samoa-4/19samoa-4-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Child-size coffins at a funeral home.", + "copyright": "" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19samoa-4/19samoa-4-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Child-size coffins at a funeral home.", + "copyright": "" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19samoa-4/merlin_166064403_da19731d-747a-4e18-b7c3-522386da9a1e-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Child-size coffins at a funeral home.", + "copyright": "" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19samoa-4/19samoa-4-mediumThreeByTwo210-v2.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Child-size coffins at a funeral home.", + "copyright": "" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19samoa-4/merlin_166064403_da19731d-747a-4e18-b7c3-522386da9a1e-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Child-size coffins at a funeral home.", + "copyright": "" + } + ], + "short_url": "https://nyti.ms/2PBt8i3" + }, + { + "section": "World", + "subsection": "Asia Pacific", + "title": "Intellectuals Arrested as Protests Over Citizenship Law Sweep India", + "abstract": "A well-known biographer of Gandhi was among those detained on Thursday as opposition to a new citizenship law continued to roil Indian cities.", + "url": "https://www.nytimes.com/2019/12/19/world/asia/india-protests-muslim.html", + "byline": "By JEFFREY GETTLEMAN", + "item_type": "Article", + "updated_date": "2019-12-19T09:22:49-05:00", + "created_date": "2019-12-19T05:39:07-05:00", + "published_date": "2019-12-19T05:39:07-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Demonstrations, Protests and Riots", + "Muslims and Islam" + ], + "org_facet": [ + "Bharatiya Janata Party" + ], + "per_facet": [ + "Guha, Ramachandra", + "Modi, Narendra" + ], + "geo_facet": [ + "India" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19india-protests-1/19india-protests-1-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Protesters denouncing a new citizenship law near the historic Red Fort in New Delhi on Thursday.", + "copyright": "Altaf Qadri/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19india-protests-1/19india-protests-1-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Protesters denouncing a new citizenship law near the historic Red Fort in New Delhi on Thursday.", + "copyright": "Altaf Qadri/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19india-protests-1/merlin_166172076_2aa9a857-eaa9-4317-8d17-29ec0f31600d-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Protesters denouncing a new citizenship law near the historic Red Fort in New Delhi on Thursday.", + "copyright": "Altaf Qadri/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19india-protests-1/merlin_166172076_2aa9a857-eaa9-4317-8d17-29ec0f31600d-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Protesters denouncing a new citizenship law near the historic Red Fort in New Delhi on Thursday.", + "copyright": "Altaf Qadri/Associated Press" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/world/19india-protests-1/merlin_166172076_2aa9a857-eaa9-4317-8d17-29ec0f31600d-superJumbo.jpg", + "format": "superJumbo", + "height": 1366, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Protesters denouncing a new citizenship law near the historic Red Fort in New Delhi on Thursday.", + "copyright": "Altaf Qadri/Associated Press" + } + ], + "short_url": "https://nyti.ms/2sGtMSA" + }, + { + "section": "Arts", + "subsection": "Art & Design", + "title": "A ‘Great Wealth Transfer’ Is Coming. What Will It Mean for Art?", + "abstract": "More than $15 trillion in assets is expected to be passed to younger generations in the next decade, including a lot of art. But will they want it?", + "url": "https://www.nytimes.com/2019/12/18/arts/design/great-wealth-transfer-art.html", + "byline": "By SCOTT REYBURN", + "item_type": "Article", + "updated_date": "2019-12-19T04:39:16-05:00", + "created_date": "2019-12-18T11:50:19-05:00", + "published_date": "2019-12-18T11:50:19-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Art", + "Wills and Estates", + "High Net Worth Individuals", + "Collectors and Collections", + "Baby Boomers", + "Generation X", + "Millennial Generation", + "Auctions" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/17/arts/17wealth-transfer1/17wealth-transfer1-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Works by Andy Warhol, whose “Double Elvis,” above, sold for $53 million at Christie’s in May, are prized by baby-boomer collectors.", + "copyright": "John Lamparski/Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/17/arts/17wealth-transfer1/17wealth-transfer1-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Works by Andy Warhol, whose “Double Elvis,” above, sold for $53 million at Christie’s in May, are prized by baby-boomer collectors.", + "copyright": "John Lamparski/Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/17/arts/17wealth-transfer1/merlin_166084740_eb7234f8-52ac-4db3-9a8c-f8cb9a451887-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Works by Andy Warhol, whose “Double Elvis,” above, sold for $53 million at Christie’s in May, are prized by baby-boomer collectors.", + "copyright": "John Lamparski/Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/17/arts/17wealth-transfer1/17wealth-transfer1-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Works by Andy Warhol, whose “Double Elvis,” above, sold for $53 million at Christie’s in May, are prized by baby-boomer collectors.", + "copyright": "John Lamparski/Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/17/arts/17wealth-transfer1/merlin_166084740_eb7234f8-52ac-4db3-9a8c-f8cb9a451887-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Works by Andy Warhol, whose “Double Elvis,” above, sold for $53 million at Christie’s in May, are prized by baby-boomer collectors.", + "copyright": "John Lamparski/Getty Images" + } + ], + "short_url": "https://nyti.ms/2Z0bF69" + }, + { + "section": "U.S.", + "subsection": "", + "title": "Puerto Rico Tries to Preserve Cockfighting Days Before Ban", + "abstract": "The governor signed legislation intended to sidestep a ban approved by Congress. The law is likely to end up in court.", + "url": "https://www.nytimes.com/2019/12/18/us/puerto-rico-cockfighting-ban.html", + "byline": "By PATRICIA MAZZEI", + "item_type": "Article", + "updated_date": "2019-12-18T20:48:01-05:00", + "created_date": "2019-12-18T15:17:40-05:00", + "published_date": "2019-12-18T15:17:40-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "United States Politics and Government", + "Cockfighting", + "Animal Abuse, Rights and Welfare", + "Farm Bill (US)", + "Law and Legislation" + ], + "org_facet": [], + "per_facet": [ + "Vazquez Garced, Wanda" + ], + "geo_facet": [ + "Puerto Rico" + ], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/us/18cockfighting/18cockfighting-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "A cockfighting ban in Puerto Rico has drawn praise from animal rights activists and anger from some who consider the practice part of the island’s culture.", + "copyright": "Erika P. Rodriguez for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/18cockfighting/18cockfighting-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "A cockfighting ban in Puerto Rico has drawn praise from animal rights activists and anger from some who consider the practice part of the island’s culture.", + "copyright": "Erika P. Rodriguez for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/18cockfighting/18cockfighting-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "A cockfighting ban in Puerto Rico has drawn praise from animal rights activists and anger from some who consider the practice part of the island’s culture.", + "copyright": "Erika P. Rodriguez for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/18cockfighting/18cockfighting-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "A cockfighting ban in Puerto Rico has drawn praise from animal rights activists and anger from some who consider the practice part of the island’s culture.", + "copyright": "Erika P. Rodriguez for The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/us/18cockfighting/merlin_165297531_38175177-2930-406f-849e-6dd6bfe0ec4f-superJumbo.jpg", + "format": "superJumbo", + "height": 1366, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "A cockfighting ban in Puerto Rico has drawn praise from animal rights activists and anger from some who consider the practice part of the island’s culture.", + "copyright": "Erika P. Rodriguez for The New York Times" + } + ], + "short_url": "https://nyti.ms/35zdtp2" + }, + { + "section": "Smarter Living", + "subsection": "", + "title": "Choose a Last-Minute Gift Anyone Would Love", + "abstract": "You’re stuck behind the curve and you don’t know what to get for someone on your list, but you do know you’re running out of time. We can help.", + "url": "https://www.nytimes.com/2019/12/18/smarter-living/last-minute-gift-ideas.html", + "byline": "By ALAN HENRY", + "item_type": "Article", + "updated_date": "2019-12-18T18:00:07-05:00", + "created_date": "2019-12-18T18:00:07-05:00", + "published_date": "2019-12-18T18:00:07-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Gifts", + "Holidays and Special Occasions", + "Christmas", + "Prices (Fares, Fees and Rates)", + "Computer and Video Games", + "Travel and Vacations", + "your-feed-wirecutter" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00sl-lastminute/00sl-lastminute-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00sl-lastminute/00sl-lastminute-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00sl-lastminute/00sl-lastminute-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00sl-lastminute/00sl-lastminute-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Getty Images" + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/multimedia/00sl-lastminute/00sl-lastminute-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Getty Images" + } + ], + "short_url": "https://nyti.ms/38USaQL" + }, + { + "section": "Smarter Living", + "subsection": "Wirecutter", + "title": "Want to Gift Someone a Pet? Here’s What to Do First", + "abstract": "Before you put a bow on a puppy or kitten for your family, here’s what to consider when getting a loved one a pet.", + "url": "https://www.nytimes.com/2019/12/16/smarter-living/wirecutter/want-to-gift-someone-a-pet-heres-what-to-do-first.html", + "byline": "By KAITLYN WELLS", + "item_type": "Article", + "updated_date": "2019-12-17T09:53:08-05:00", + "created_date": "2019-12-16T17:30:04-05:00", + "published_date": "2019-12-16T17:30:04-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Pets", + "Animal Behavior", + "Dogs", + "Cats", + "your-feed-wirecutter" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/03/smarter-living/00wc_petgift/00wc_petgift-thumbStandard.png", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Yann Bastard" + }, + { + "url": "https://static01.nyt.com/images/2019/12/03/smarter-living/00wc_petgift/00wc_petgift-thumbLarge.png", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Yann Bastard" + }, + { + "url": "https://static01.nyt.com/images/2019/12/03/smarter-living/00wc_petgift/00wc_petgift-articleInline.png", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Yann Bastard" + }, + { + "url": "https://static01.nyt.com/images/2019/12/03/smarter-living/00wc_petgift/00wc_petgift-mediumThreeByTwo210.png", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Yann Bastard" + }, + { + "url": "https://static01.nyt.com/images/2019/12/03/smarter-living/00wc_petgift/00wc_petgift-superJumbo.png", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Yann Bastard" + } + ], + "short_url": "https://nyti.ms/2M0CUbq" + }, + { + "section": "Smarter Living", + "subsection": "", + "title": "You Could Die Today. Here’s How to Reduce That Risk.", + "abstract": "No one lives forever, but you can do things to extend your life for as long as possible. Let’s walk through a typical day and see where your risks are highest.", + "url": "https://www.nytimes.com/2019/12/12/smarter-living/reducing-fatality-risks.html", + "byline": "By ALEXANDER WEBB", + "item_type": "Article", + "updated_date": "2019-12-12T17:30:05-05:00", + "created_date": "2019-12-12T17:30:05-05:00", + "published_date": "2019-12-12T17:30:05-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Deaths (Fatalities)", + "Traffic Accidents and Safety", + "Hygiene and Cleanliness", + "Bacteria", + "Food", + "Alcohol Abuse" + ], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/10/09/smarter-living/00sl_dietoday/00sl_dietoday-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Minet Kim" + }, + { + "url": "https://static01.nyt.com/images/2019/10/09/smarter-living/00sl_dietoday/00sl_dietoday-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Minet Kim" + }, + { + "url": "https://static01.nyt.com/images/2019/10/09/smarter-living/00sl_dietoday/00sl_dietoday-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Minet Kim" + }, + { + "url": "https://static01.nyt.com/images/2019/10/09/smarter-living/00sl_dietoday/00sl_dietoday-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Minet Kim" + }, + { + "url": "https://static01.nyt.com/images/2019/10/09/smarter-living/00sl_dietoday/00sl_dietoday-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Minet Kim" + } + ], + "short_url": "https://nyti.ms/35oxUoC" + }, + { + "section": "Smarter Living", + "subsection": "", + "title": "The Right Way to Close Out an Email. (Skip That Inspirational Quote.)", + "abstract": "Signoffs and signatures: Why hitting send can be so fraught.", + "url": "https://www.nytimes.com/2019/12/15/smarter-living/the-right-way-to-close-out-an-email-skip-that-inspirational-quote.html", + "byline": "By JEN DOLL", + "item_type": "Article", + "updated_date": "2019-12-15T22:00:01-05:00", + "created_date": "2019-12-15T22:00:01-05:00", + "published_date": "2019-12-15T22:00:01-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [], + "org_facet": [], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/10/smarter-living/10sl-emailend-promo/10sl-emailend-promo-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Pablo Rochat" + }, + { + "url": "https://static01.nyt.com/images/2019/12/10/smarter-living/10sl-emailend-promo/10sl-emailend-promo-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Pablo Rochat" + }, + { + "url": "https://static01.nyt.com/images/2019/12/10/smarter-living/10sl-emailend-promo/10sl-emailend-promo-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Pablo Rochat" + }, + { + "url": "https://static01.nyt.com/images/2019/12/10/smarter-living/10sl-emailend-promo/10sl-emailend-promo-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Pablo Rochat" + }, + { + "url": "https://static01.nyt.com/images/2019/12/10/smarter-living/10sl-emailend-promo/10sl-emailend-promo-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "", + "copyright": "Pablo Rochat" + } + ], + "short_url": "https://nyti.ms/36Dez3d" + }, + { + "section": "Movies", + "subsection": "", + "title": "The Oscars Will Soon Face a Best-Actor Bloodbath", + "abstract": "Only five men will be nominated, but with at least a dozen solid contenders, including big names like Leonardo DiCaprio and Robert De Niro, who will make the final cut?", + "url": "https://www.nytimes.com/2019/12/18/movies/oscars-best-actor-contenders.html", + "byline": "By KYLE BUCHANAN", + "item_type": "Article", + "updated_date": "2019-12-18T13:55:23-05:00", + "created_date": "2019-12-18T13:55:23-05:00", + "published_date": "2019-12-18T13:55:23-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Movies", + "Academy Awards (Oscars)", + "Actors and Actresses", + "Joker (Movie)", + "The Irishman (Movie)", + "Once Upon a Time in Hollywood (Movie)", + "Dolemite Is My Name (Movie)", + "Uncut Gems (Movie)", + "Pain and Glory (Movie)", + "Rocketman (Movie)", + "Richard Jewell (Movie)", + "The Two Popes (Movie)", + "1917 (Movie)", + "Ford v Ferrari (Movie)", + "Marriage Story (Movie)" + ], + "org_facet": [], + "per_facet": [ + "Bale, Christian", + "Banderas, Antonio", + "De Niro, Robert", + "DiCaprio, Leonardo", + "Driver, Adam", + "Egerton, Taron (1989- )", + "Hauser, Paul Walter", + "MacKay, George", + "Murphy, Eddie", + "Sandler, Adam", + "Pryce, Jonathan", + "Phoenix, Joaquin" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/18/arts/18carpetbagger-promo/18carpetbagger-thumbStandard-v4.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Clockwise from top left: Antonio Banderas in “Pain and Glory,” Eddie Murphy in “Dolemite Is My Name,” Adam Sandler in “Uncut Gems,” Adam Driver in “Marriage Story,” Jonathan Pryce in “The Two Popes” and Joaquin Phoenix in “Joker.”", + "copyright": "Clockwise from top left: El Deseo and Sony Pictures Classics; Netflix; A24; Warner Bros." + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/arts/18carpetbagger-promo/18carpetbagger-thumbLarge-v4.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Clockwise from top left: Antonio Banderas in “Pain and Glory,” Eddie Murphy in “Dolemite Is My Name,” Adam Sandler in “Uncut Gems,” Adam Driver in “Marriage Story,” Jonathan Pryce in “The Two Popes” and Joaquin Phoenix in “Joker.”", + "copyright": "Clockwise from top left: El Deseo and Sony Pictures Classics; Netflix; A24; Warner Bros." + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/arts/18carpetbagger-promo/18carpetbagger-articleInline-v3.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Clockwise from top left: Antonio Banderas in “Pain and Glory,” Eddie Murphy in “Dolemite Is My Name,” Adam Sandler in “Uncut Gems,” Adam Driver in “Marriage Story,” Jonathan Pryce in “The Two Popes” and Joaquin Phoenix in “Joker.”", + "copyright": "Clockwise from top left: El Deseo and Sony Pictures Classics; Netflix; A24; Warner Bros." + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/arts/18carpetbagger-promo/18carpetbagger-mediumThreeByTwo210-v3.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Clockwise from top left: Antonio Banderas in “Pain and Glory,” Eddie Murphy in “Dolemite Is My Name,” Adam Sandler in “Uncut Gems,” Adam Driver in “Marriage Story,” Jonathan Pryce in “The Two Popes” and Joaquin Phoenix in “Joker.”", + "copyright": "Clockwise from top left: El Deseo and Sony Pictures Classics; Netflix; A24; Warner Bros." + }, + { + "url": "https://static01.nyt.com/images/2019/12/18/arts/18carpetbagger-promo/18carpetbagger-superJumbo-v3.jpg", + "format": "superJumbo", + "height": 1366, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Clockwise from top left: Antonio Banderas in “Pain and Glory,” Eddie Murphy in “Dolemite Is My Name,” Adam Sandler in “Uncut Gems,” Adam Driver in “Marriage Story,” Jonathan Pryce in “The Two Popes” and Joaquin Phoenix in “Joker.”", + "copyright": "Clockwise from top left: El Deseo and Sony Pictures Classics; Netflix; A24; Warner Bros." + } + ], + "short_url": "https://nyti.ms/2Pz0ZIm" + }, + { + "section": "Obituaries", + "subsection": "", + "title": "Overlooked No More: Earl Tucker, a Dancer Known as ‘Snakehips’", + "abstract": "Tucker was a name attraction in Harlem nightclubs in the 1920s, and his moves were echoed by Elvis Presley and Michael Jackson.", + "url": "https://www.nytimes.com/2019/12/18/obituaries/earl-tucker-overlooked.html", + "byline": "By BRIAN SEIBERT", + "item_type": "Article", + "updated_date": "2019-12-19T05:57:45-05:00", + "created_date": "2019-12-18T16:22:54-05:00", + "published_date": "2019-12-18T16:22:54-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Black People", + "Dancing", + "Race and Ethnicity", + "Biographical Information", + "Past Tense" + ], + "org_facet": [], + "per_facet": [ + "Tucker, Earl (1905-37)", + "Presley, Elvis", + "Ellington, Duke", + "Jackson, Michael" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/09/multimedia/00overlooked-tucker/00overlooked-tucker-thumbStandard-v7.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Earl \"Snakehips\" Tucker in about 1930. His dancing was entertainment that played to the illicit appeal of Harlem nightclubs.", + "copyright": "NYPL Schomburg Center for Research in Black Culture" + }, + { + "url": "https://static01.nyt.com/images/2019/12/09/multimedia/00overlooked-tucker/00overlooked-tucker-thumbLarge-v7.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Earl \"Snakehips\" Tucker in about 1930. His dancing was entertainment that played to the illicit appeal of Harlem nightclubs.", + "copyright": "NYPL Schomburg Center for Research in Black Culture" + }, + { + "url": "https://static01.nyt.com/images/2019/12/09/multimedia/00overlooked-tucker/00overlooked-tucker-articleInline-v5.jpg", + "format": "Normal", + "height": 240, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Earl \"Snakehips\" Tucker in about 1930. His dancing was entertainment that played to the illicit appeal of Harlem nightclubs.", + "copyright": "NYPL Schomburg Center for Research in Black Culture" + }, + { + "url": "https://static01.nyt.com/images/2019/12/09/multimedia/00overlooked-tucker/00overlooked-tucker-mediumThreeByTwo210-v7.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Earl \"Snakehips\" Tucker in about 1930. His dancing was entertainment that played to the illicit appeal of Harlem nightclubs.", + "copyright": "NYPL Schomburg Center for Research in Black Culture" + }, + { + "url": "https://static01.nyt.com/images/2019/12/09/multimedia/00overlooked-tucker/00overlooked-tucker-superJumbo-v5.jpg", + "format": "superJumbo", + "height": 2048, + "width": 1619, + "type": "image", + "subtype": "photo", + "caption": "Earl \"Snakehips\" Tucker in about 1930. His dancing was entertainment that played to the illicit appeal of Harlem nightclubs.", + "copyright": "NYPL Schomburg Center for Research in Black Culture" + } + ], + "short_url": "https://nyti.ms/2PxEymZ" + }, + { + "section": "Arts", + "subsection": "", + "title": "A New ‘Christmas Carol’ Explores the Roots of Scrooge’s Scorn", + "abstract": "A new TV adaptation by Steven Knight (“Peaky Blinders”) presents a portrait of the miser as a (relatively) young man.", + "url": "https://www.nytimes.com/2019/12/13/arts/a-christmas-carol-scrooge-fx.html", + "byline": "By ROSLYN SULCAS", + "item_type": "Article", + "updated_date": "2019-12-13T05:00:13-05:00", + "created_date": "2019-12-13T05:00:13-05:00", + "published_date": "2019-12-13T05:00:13-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "Television", + "A Christmas Carol (TV Program)" + ], + "org_facet": [ + "FX (TV Network)", + "British Broadcasting Corp" + ], + "per_facet": [ + "Murphy, Nick (Film Director)", + "Knight, Steven", + "Pearce, Guy" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/15/arts/15christmascarol3/15christmascarol3-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Serkis as the Ghost of Christmas Past. “Every generation needs its own interpretation” of Dickens’s story, said the creator Steven Knight.", + "copyright": "Robert Viglasky/FX" + }, + { + "url": "https://static01.nyt.com/images/2019/12/15/arts/15christmascarol3/15christmascarol3-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Serkis as the Ghost of Christmas Past. “Every generation needs its own interpretation” of Dickens’s story, said the creator Steven Knight.", + "copyright": "Robert Viglasky/FX" + }, + { + "url": "https://static01.nyt.com/images/2019/12/15/arts/15christmascarol3/15christmascarol3-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Serkis as the Ghost of Christmas Past. “Every generation needs its own interpretation” of Dickens’s story, said the creator Steven Knight.", + "copyright": "Robert Viglasky/FX" + }, + { + "url": "https://static01.nyt.com/images/2019/12/15/arts/15christmascarol3/15christmascarol3-mediumThreeByTwo210.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Serkis as the Ghost of Christmas Past. “Every generation needs its own interpretation” of Dickens’s story, said the creator Steven Knight.", + "copyright": "Robert Viglasky/FX" + }, + { + "url": "https://static01.nyt.com/images/2019/12/15/arts/15christmascarol3/15christmascarol3-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Serkis as the Ghost of Christmas Past. “Every generation needs its own interpretation” of Dickens’s story, said the creator Steven Knight.", + "copyright": "Robert Viglasky/FX" + } + ], + "short_url": "https://nyti.ms/2EhCokQ" + }, + { + "section": "Arts", + "subsection": "Television", + "title": "Trump Has Been Moved to America’s Spam Folder, Says Trevor Noah", + "abstract": "The impeachment, of course, was the talk of late night on Wednesday. Noah said President Trump had gone through “all the stages of grief in one tweet.”", + "url": "https://www.nytimes.com/2019/12/19/arts/television/late-night-impeachment.html", + "byline": "By TRISH BENDIX", + "item_type": "Article", + "updated_date": "2019-12-19T02:18:35-05:00", + "created_date": "2019-12-19T02:18:35-05:00", + "published_date": "2019-12-19T02:18:35-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [ + "The Tonight Show (TV Program)" + ], + "org_facet": [], + "per_facet": [ + "Colbert, Stephen", + "Fallon, Jimmy", + "Noah, Trevor (1984- )", + "Trump, Donald J" + ], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/19/arts/19latenight/19latenight-thumbStandard.png", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "As the House made him the third impeached president in American history, President Trump “went through all the stages of grief in one tweet,” Trevor Noah said.", + "copyright": "Comedy Central" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/arts/19latenight/19latenight-thumbLarge.png", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "As the House made him the third impeached president in American history, President Trump “went through all the stages of grief in one tweet,” Trevor Noah said.", + "copyright": "Comedy Central" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/arts/19latenight/19latenight-articleInline.png", + "format": "Normal", + "height": 106, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "As the House made him the third impeached president in American history, President Trump “went through all the stages of grief in one tweet,” Trevor Noah said.", + "copyright": "Comedy Central" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/arts/19latenight/19latenight-mediumThreeByTwo210.png", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "As the House made him the third impeached president in American history, President Trump “went through all the stages of grief in one tweet,” Trevor Noah said.", + "copyright": "Comedy Central" + }, + { + "url": "https://static01.nyt.com/images/2019/12/19/arts/19latenight/19latenight-superJumbo.png", + "format": "superJumbo", + "height": 436, + "width": 782, + "type": "image", + "subtype": "photo", + "caption": "As the House made him the third impeached president in American history, President Trump “went through all the stages of grief in one tweet,” Trevor Noah said.", + "copyright": "Comedy Central" + } + ], + "short_url": "https://nyti.ms/35EOPnc" + }, + { + "section": "Neediest Cases", + "subsection": "", + "title": "After Sputtering in ‘Dead-End Jobs,’ Pursuing a Tech Career", + "abstract": "At 9, Teonia Alston began experimenting with computers. Since having a baby and balancing unfulfilling jobs, she’s motivated to pursue her passion.", + "url": "https://www.nytimes.com/2019/12/18/neediest-cases/tech-studies-mother-interview-clothes.html", + "byline": "By ELISHA BROWN", + "item_type": "Article", + "updated_date": "2019-12-18T23:30:16-05:00", + "created_date": "2019-12-18T12:48:54-05:00", + "published_date": "2019-12-18T12:48:54-05:00", + "material_type_facet": "", + "kicker": "", + "des_facet": [], + "org_facet": [ + "New York Times Neediest Cases Fund", + "Community Service Society of New York" + ], + "per_facet": [], + "geo_facet": [], + "multimedia": [ + { + "url": "https://static01.nyt.com/images/2019/12/13/neediest-cases/00ncf-alston/00ncf-alston-thumbStandard.jpg", + "format": "Standard Thumbnail", + "height": 75, + "width": 75, + "type": "image", + "subtype": "photo", + "caption": "Ms. Alston received a grant from The Neediest Cases Fund to purchase work clothes.", + "copyright": "Michelle V. Agins/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/13/neediest-cases/00ncf-alston/00ncf-alston-thumbLarge.jpg", + "format": "thumbLarge", + "height": 150, + "width": 150, + "type": "image", + "subtype": "photo", + "caption": "Ms. Alston received a grant from The Neediest Cases Fund to purchase work clothes.", + "copyright": "Michelle V. Agins/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/13/neediest-cases/00ncf-alston/00ncf-alston-articleInline.jpg", + "format": "Normal", + "height": 127, + "width": 190, + "type": "image", + "subtype": "photo", + "caption": "Ms. Alston received a grant from The Neediest Cases Fund to purchase work clothes.", + "copyright": "Michelle V. Agins/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/13/neediest-cases/00ncf-alston/00ncf-alston-mediumThreeByTwo210-v2.jpg", + "format": "mediumThreeByTwo210", + "height": 140, + "width": 210, + "type": "image", + "subtype": "photo", + "caption": "Ms. Alston received a grant from The Neediest Cases Fund to purchase work clothes.", + "copyright": "Michelle V. Agins/The New York Times" + }, + { + "url": "https://static01.nyt.com/images/2019/12/13/neediest-cases/00ncf-alston/00ncf-alston-superJumbo.jpg", + "format": "superJumbo", + "height": 1365, + "width": 2048, + "type": "image", + "subtype": "photo", + "caption": "Ms. Alston received a grant from The Neediest Cases Fund to purchase work clothes.", + "copyright": "Michelle V. Agins/The New York Times" + } + ], + "short_url": "https://nyti.ms/2Z98Mjy" + } + ] +} \ No newline at end of file