diff --git a/.flutter-plugins b/.flutter-plugins new file mode 100644 index 0000000..8df8fbf --- /dev/null +++ b/.flutter-plugins @@ -0,0 +1,9 @@ +# This is a generated file; do not edit or check into version control. +integration_test=/Users/alanmantoux/flutter/packages/integration_test/ +url_launcher=/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.1.6/ +url_launcher_android=/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_android-6.0.21/ +url_launcher_ios=/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_ios-6.0.17/ +url_launcher_linux=/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_linux-3.0.1/ +url_launcher_macos=/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-3.0.1/ +url_launcher_web=/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-2.0.13/ +url_launcher_windows=/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_windows-3.0.1/ diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies new file mode 100644 index 0000000..724bc63 --- /dev/null +++ b/.flutter-plugins-dependencies @@ -0,0 +1 @@ +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"integration_test","path":"/Users/alanmantoux/flutter/packages/integration_test/","native_build":true,"dependencies":[]},{"name":"url_launcher_ios","path":"/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_ios-6.0.17/","native_build":true,"dependencies":[]}],"android":[{"name":"integration_test","path":"/Users/alanmantoux/flutter/packages/integration_test/","native_build":true,"dependencies":[]},{"name":"url_launcher_android","path":"/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_android-6.0.21/","native_build":true,"dependencies":[]}],"macos":[{"name":"url_launcher_macos","path":"/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-3.0.1/","native_build":true,"dependencies":[]}],"linux":[{"name":"url_launcher_linux","path":"/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_linux-3.0.1/","native_build":true,"dependencies":[]}],"windows":[{"name":"url_launcher_windows","path":"/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_windows-3.0.1/","native_build":true,"dependencies":[]}],"web":[{"name":"url_launcher_web","path":"/Users/alanmantoux/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-2.0.13/","dependencies":[]}]},"dependencyGraph":[{"name":"integration_test","dependencies":[]},{"name":"url_launcher","dependencies":["url_launcher_android","url_launcher_ios","url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_android","dependencies":[]},{"name":"url_launcher_ios","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2022-11-07 18:54:01.432321","version":"3.3.7"} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..96486fd --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +.packages +build/ diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..8c825b0 --- /dev/null +++ b/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 + channel: stable + +project_type: plugin + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 + base_revision: e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 + - platform: android + create_revision: e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 + base_revision: e99c9c7cd9f6c0b2f8ae6e3ebfd585239f5568f4 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..41cc7d8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,3 @@ +## 0.0.1 + +* TODO: Describe initial release. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ba75c69 --- /dev/null +++ b/LICENSE @@ -0,0 +1 @@ +TODO: Add your license here. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8415938 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# giphy_selector + +A new Flutter plugin project. + +## Getting Started + +This project is a starting point for a Flutter +[plug-in package](https://flutter.dev/developing-packages/), +a specialized package that includes platform-specific implementation code for +Android and/or iOS. + +For help getting started with Flutter development, view the +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. + +The plugin project was generated without specifying the `--platforms` flag, no platforms are currently supported. +To add platforms, run `flutter create -t plugin --platforms .` in this directory. +You can also find a detailed instruction on how to add platforms in the `pubspec.yaml` at https://flutter.dev/docs/development/packages-and-plugins/developing-packages#plugin-platforms. diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..a5744c1 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..161bdcd --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.cxx diff --git a/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java new file mode 100644 index 0000000..7c5d4c5 --- /dev/null +++ b/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -0,0 +1,27 @@ +package io.flutter.plugins; + +import io.flutter.plugin.common.PluginRegistry; +import dev.flutter.plugins.integration_test.IntegrationTestPlugin; +import io.flutter.plugins.urllauncher.UrlLauncherPlugin; + +/** + * Generated file. Do not edit. + */ +public final class GeneratedPluginRegistrant { + public static void registerWith(PluginRegistry registry) { + if (alreadyRegisteredWith(registry)) { + return; + } + IntegrationTestPlugin.registerWith(registry.registrarFor("dev.flutter.plugins.integration_test.IntegrationTestPlugin")); + UrlLauncherPlugin.registerWith(registry.registrarFor("io.flutter.plugins.urllauncher.UrlLauncherPlugin")); + } + + private static boolean alreadyRegisteredWith(PluginRegistry registry) { + final String key = GeneratedPluginRegistrant.class.getCanonicalName(); + if (registry.hasPlugin(key)) { + return true; + } + registry.registrarFor(key); + return false; + } +} diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..350a7ae --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,46 @@ +group 'com.example.giphy_selector' +version '1.0-SNAPSHOT' + +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.1.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion 31 + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + minSdkVersion 16 + } +} diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..7cbee23 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'giphy_selector' diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml new file mode 100644 index 0000000..20772b5 --- /dev/null +++ b/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + diff --git a/android/src/main/kotlin/com/example/giphy_selector/GiphySelectorPlugin.kt b/android/src/main/kotlin/com/example/giphy_selector/GiphySelectorPlugin.kt new file mode 100644 index 0000000..dd5163f --- /dev/null +++ b/android/src/main/kotlin/com/example/giphy_selector/GiphySelectorPlugin.kt @@ -0,0 +1,35 @@ +package com.example.giphy_selector + +import androidx.annotation.NonNull + +import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugin.common.MethodChannel.MethodCallHandler +import io.flutter.plugin.common.MethodChannel.Result + +/** GiphySelectorPlugin */ +class GiphySelectorPlugin: FlutterPlugin, MethodCallHandler { + /// The MethodChannel that will the communication between Flutter and native Android + /// + /// This local reference serves to register the plugin with the Flutter Engine and unregister it + /// when the Flutter Engine is detached from the Activity + private lateinit var channel : MethodChannel + + override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { + channel = MethodChannel(flutterPluginBinding.binaryMessenger, "giphy_selector") + channel.setMethodCallHandler(this) + } + + override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { + if (call.method == "getPlatformVersion") { + result.success("Android ${android.os.Build.VERSION.RELEASE}") + } else { + result.notImplemented() + } + } + + override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { + channel.setMethodCallHandler(null) + } +} diff --git a/assets/img/GIPHY_dark.png b/assets/img/GIPHY_dark.png new file mode 100644 index 0000000..f84bd24 Binary files /dev/null and b/assets/img/GIPHY_dark.png differ diff --git a/assets/img/GIPHY_light.png b/assets/img/GIPHY_light.png new file mode 100644 index 0000000..6d171cc Binary files /dev/null and b/assets/img/GIPHY_light.png differ diff --git a/assets/img/poweredby_dark.png b/assets/img/poweredby_dark.png new file mode 100644 index 0000000..16fdce6 Binary files /dev/null and b/assets/img/poweredby_dark.png differ diff --git a/assets/img/poweredby_light.png b/assets/img/poweredby_light.png new file mode 100644 index 0000000..f979e8b Binary files /dev/null and b/assets/img/poweredby_light.png differ diff --git a/example/.env b/example/.env new file mode 100644 index 0000000..3f34931 --- /dev/null +++ b/example/.env @@ -0,0 +1 @@ +TEST=true \ No newline at end of file diff --git a/example/.gitignore b/example/.gitignore new file mode 100644 index 0000000..ae1f183 --- /dev/null +++ b/example/.gitignore @@ -0,0 +1,42 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + diff --git a/example/README.md b/example/README.md new file mode 100644 index 0000000..ef7f36b --- /dev/null +++ b/example/README.md @@ -0,0 +1,23 @@ +# example + +A new Flutter project. + +## Getting Started + +1. Create a GIPHY API Key on the [Developer Dashboard](https://developers.giphy.com/dashboard/). +2. Create a ```.env``` file in the root and add your API key. + +``` +giphy_api_key = 'Your API key' +``` + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) + +For help getting started with Flutter, view our +[online documentation](https://flutter.dev/docs), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/example/analysis_options.yaml b/example/analysis_options.yaml new file mode 100644 index 0000000..ae08714 --- /dev/null +++ b/example/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/example/android/.gitignore b/example/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/example/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle new file mode 100644 index 0000000..0833ecf --- /dev/null +++ b/example/android/app/build.gradle @@ -0,0 +1,71 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..ffa0940 --- /dev/null +++ b/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e6a92ef --- /dev/null +++ b/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + diff --git a/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt b/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt new file mode 100644 index 0000000..a8ce3c5 --- /dev/null +++ b/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() { +} diff --git a/example/android/app/src/main/res/drawable-v21/launch_background.xml b/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..bee6a22 --- /dev/null +++ b/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/android/app/src/main/res/drawable/launch_background.xml b/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..1d1924f --- /dev/null +++ b/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..db77bb4 Binary files /dev/null and b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..17987b7 Binary files /dev/null and b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..09d4391 Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..d5f1c8d Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..4d6372e Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/example/android/app/src/main/res/values-night/styles.xml b/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..96856cd --- /dev/null +++ b/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..f7dccf6 --- /dev/null +++ b/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/example/android/app/src/profile/AndroidManifest.xml b/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..ffa0940 --- /dev/null +++ b/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/example/android/build.gradle b/example/android/build.gradle new file mode 100644 index 0000000..83ae220 --- /dev/null +++ b/example/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.6.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.1.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/example/android/gradle.properties b/example/android/gradle.properties new file mode 100644 index 0000000..94adc3a --- /dev/null +++ b/example/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..cb24abd --- /dev/null +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip diff --git a/example/android/settings.gradle b/example/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/example/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/example/assets/demo/giphy_get.webp b/example/assets/demo/giphy_get.webp new file mode 100644 index 0000000..47df41c Binary files /dev/null and b/example/assets/demo/giphy_get.webp differ diff --git a/example/assets/demo/giphy_get_2.png b/example/assets/demo/giphy_get_2.png new file mode 100644 index 0000000..bff6f7e Binary files /dev/null and b/example/assets/demo/giphy_get_2.png differ diff --git a/example/assets/demo/giphy_get_widget.gif b/example/assets/demo/giphy_get_widget.gif new file mode 100644 index 0000000..dc0bb28 Binary files /dev/null and b/example/assets/demo/giphy_get_widget.gif differ diff --git a/example/assets/img/GIPHY Transparent 180px.png b/example/assets/img/GIPHY Transparent 180px.png new file mode 100644 index 0000000..f806232 Binary files /dev/null and b/example/assets/img/GIPHY Transparent 180px.png differ diff --git a/example/assets/img/GIPHY Transparent 18px.png b/example/assets/img/GIPHY Transparent 18px.png new file mode 100644 index 0000000..282b8a5 Binary files /dev/null and b/example/assets/img/GIPHY Transparent 18px.png differ diff --git a/example/assets/img/GIPHY Transparent 270px.png b/example/assets/img/GIPHY Transparent 270px.png new file mode 100644 index 0000000..fe2376e Binary files /dev/null and b/example/assets/img/GIPHY Transparent 270px.png differ diff --git a/example/assets/img/GIPHY Transparent 27px.png b/example/assets/img/GIPHY Transparent 27px.png new file mode 100644 index 0000000..3b9a1e6 Binary files /dev/null and b/example/assets/img/GIPHY Transparent 27px.png differ diff --git a/example/assets/img/GIPHY Transparent 36px.png b/example/assets/img/GIPHY Transparent 36px.png new file mode 100644 index 0000000..d8d7b6e Binary files /dev/null and b/example/assets/img/GIPHY Transparent 36px.png differ diff --git a/example/assets/img/GIPHY Transparent 45px.png b/example/assets/img/GIPHY Transparent 45px.png new file mode 100644 index 0000000..a9b5bb1 Binary files /dev/null and b/example/assets/img/GIPHY Transparent 45px.png differ diff --git a/example/assets/img/GIPHY Transparent 63px.png b/example/assets/img/GIPHY Transparent 63px.png new file mode 100644 index 0000000..f720bdf Binary files /dev/null and b/example/assets/img/GIPHY Transparent 63px.png differ diff --git a/example/assets/img/GIPHY Transparent.eps b/example/assets/img/GIPHY Transparent.eps new file mode 100644 index 0000000..afcf365 Binary files /dev/null and b/example/assets/img/GIPHY Transparent.eps differ diff --git a/example/lib/main.dart b/example/lib/main.dart new file mode 100644 index 0000000..981bfaa --- /dev/null +++ b/example/lib/main.dart @@ -0,0 +1,151 @@ +import 'dart:io'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_dotenv/flutter_dotenv.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:giphy_selector/giphy_selector.dart'; + +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + if (!kIsWeb) { + await dotenv.load(mergeWith: Platform.environment); + } else { + await dotenv.load(); + } + + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({Key key}) : super(key: key); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Giphy Get Demo', + theme: ThemeData( + brightness: Brightness.light, + primarySwatch: Colors.blue, + visualDensity: VisualDensity.adaptivePlatformDensity, + ), + darkTheme: ThemeData( + brightness: Brightness.dark, + primarySwatch: Colors.purple, + visualDensity: VisualDensity.adaptivePlatformDensity, + ), + localizationsDelegates: [ + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GiphyGetUILocalizations.delegate + ], + supportedLocales: const [ + Locale('en', ''), + Locale('es', ''), + Locale('fr', ''), + ], + home: const MyHomePage(title: 'Giphy Get Demo'), + themeMode: ThemeMode.system, + ); + } +} + +class MyHomePage extends StatefulWidget { + final String title; + + const MyHomePage({Key key, this.title}) : super(key: key); + + @override + // ignore: library_private_types_in_public_api + _MyHomePageState createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + GiphyGif currentGif; + GiphyClient client; + String randomId = ""; + String giphyApiKey = 'dVy51G92K4VqOMBVv6o4MJIrsefzHDyt'; + + @override + void initState() { + super.initState(); + + client = GiphyClient(apiKey: giphyApiKey, randomId: ''); + WidgetsBinding.instance.addPostFrameCallback((_) { + client.getRandomId().then((value) { + setState(() { + randomId = value; + }); + }); + }); + } + + @override + Widget build(BuildContext context) { + return GiphySelectorWrapper( + apiKey: giphyApiKey, + builder: (stream, giphyGetWrapper) { + stream.listen((gif) { + setState(() { + currentGif = gif; + }); + }); + + return Scaffold( + appBar: AppBar( + title: Row( + children: [ + Image.asset("assets/img/GIPHY Transparent 18px.png"), + const SizedBox( + width: 20, + ), + const Text("Demo") + ], + ), + ), + body: Padding( + padding: const EdgeInsets.all(8.0), + child: Align( + alignment: Alignment.center, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox( + height: 20, + ), + Text("Random ID: $randomId"), + const Text( + "Selected GIF", + style: + TextStyle(fontSize: 20, fontWeight: FontWeight.bold), + ), + const SizedBox( + height: 10, + ), + currentGif != null + ? SizedBox( + child: GiphyGifWidget( + imageAlignment: Alignment.center, + gif: currentGif, + giphyGetWrapper: giphyGetWrapper, + borderRadius: BorderRadius.circular(30), + showGiphyLabel: true, + ), + ) + : const Text("No GIF") + ], + ), + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: () async { + giphyGetWrapper.getGif('', context); + }, + tooltip: 'Open Sticker', + child: const Icon(Icons + .insert_emoticon)), // This trailing comma makes auto-formatting nicer for build methods. + ); + }); + } +} diff --git a/example/pubspec.lock b/example/pubspec.lock new file mode 100644 index 0000000..c1715c1 --- /dev/null +++ b/example/pubspec.lock @@ -0,0 +1,354 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.0" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.9.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.16.0" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.2" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.2" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_dotenv: + dependency: "direct main" + description: + name: flutter_dotenv + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.2" + flutter_driver: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_staggered_grid_view: + dependency: transitive + description: + name: flutter_staggered_grid_view + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.2" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + fuchsia_remote_debug_protocol: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + giphy_selector: + dependency: "direct main" + description: + path: ".." + relative: true + source: path + version: "1.1.0" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.5" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.1" + integration_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + intl: + dependency: transitive + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.17.0" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.4" + lints: + dependency: transitive + description: + name: lints + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.12" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.2" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + sync_http: + dependency: transitive + description: + name: sync_http + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.12" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + url_launcher: + dependency: transitive + description: + name: url_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.6" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.18" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.17" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.13" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + vm_service: + dependency: transitive + description: + name: vm_service + url: "https://pub.dartlang.org" + source: hosted + version: "9.0.0" + webdriver: + dependency: transitive + description: + name: webdriver + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" +sdks: + dart: ">=2.18.0 <3.0.0" + flutter: ">=2.10.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml new file mode 100644 index 0000000..6214c2e --- /dev/null +++ b/example/pubspec.yaml @@ -0,0 +1,32 @@ +name: giphy_get_demo +description: giphy_get Demo APP. +publish_to: "none" # Remove this line if you wish to publish to pub.dev + +version: 1.0.1+1 + +environment: + sdk: ">=2.7.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + flutter_localizations: + sdk: flutter + flutter_dotenv: ^5.0.2 + giphy_selector: + path: ../ + + +dev_dependencies: + integration_test: + sdk: flutter + + flutter_test: + sdk: flutter + flutter_lints: ^2.0.1 + +flutter: + uses-material-design: true + assets: + - assets/img/ + - .env diff --git a/example/web/favicon.png b/example/web/favicon.png new file mode 100644 index 0000000..8aaa46a Binary files /dev/null and b/example/web/favicon.png differ diff --git a/example/web/icons/Icon-192.png b/example/web/icons/Icon-192.png new file mode 100644 index 0000000..b749bfe Binary files /dev/null and b/example/web/icons/Icon-192.png differ diff --git a/example/web/icons/Icon-512.png b/example/web/icons/Icon-512.png new file mode 100644 index 0000000..88cfd48 Binary files /dev/null and b/example/web/icons/Icon-512.png differ diff --git a/example/web/icons/Icon-maskable-192.png b/example/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000..eb9b4d7 Binary files /dev/null and b/example/web/icons/Icon-maskable-192.png differ diff --git a/example/web/icons/Icon-maskable-512.png b/example/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000..d69c566 Binary files /dev/null and b/example/web/icons/Icon-maskable-512.png differ diff --git a/example/web/manifest.json b/example/web/manifest.json new file mode 100644 index 0000000..037463c --- /dev/null +++ b/example/web/manifest.json @@ -0,0 +1,23 @@ +{ + "name": "example", + "short_name": "example", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/lib/giphy_selector.dart b/lib/giphy_selector.dart new file mode 100644 index 0000000..e0514db --- /dev/null +++ b/lib/giphy_selector.dart @@ -0,0 +1,5 @@ +library giphy_selector; + +export 'src/client/client.dart'; +export 'src/widgets/giphy_gif.dart'; +export 'src/widgets/wrapper.dart' show GiphySelector, GiphySelectorWrapper; diff --git a/lib/giphy_selector_method_channel.dart b/lib/giphy_selector_method_channel.dart new file mode 100644 index 0000000..38ca6d6 --- /dev/null +++ b/lib/giphy_selector_method_channel.dart @@ -0,0 +1,17 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; + +import 'giphy_selector_platform_interface.dart'; + +/// An implementation of [GiphySelectorPlatform] that uses method channels. +class MethodChannelGiphySelector extends GiphySelectorPlatform { + /// The method channel used to interact with the native platform. + @visibleForTesting + final methodChannel = const MethodChannel('giphy_selector'); + + @override + Future getPlatformVersion() async { + final version = await methodChannel.invokeMethod('getPlatformVersion'); + return version; + } +} diff --git a/lib/giphy_selector_platform_interface.dart b/lib/giphy_selector_platform_interface.dart new file mode 100644 index 0000000..2165ee5 --- /dev/null +++ b/lib/giphy_selector_platform_interface.dart @@ -0,0 +1,29 @@ +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; + +import 'giphy_selector_method_channel.dart'; + +abstract class GiphySelectorPlatform extends PlatformInterface { + /// Constructs a GiphySelectorPlatform. + GiphySelectorPlatform() : super(token: _token); + + static final Object _token = Object(); + + static GiphySelectorPlatform _instance = MethodChannelGiphySelector(); + + /// The default instance of [GiphySelectorPlatform] to use. + /// + /// Defaults to [MethodChannelGiphySelector]. + static GiphySelectorPlatform get instance => _instance; + + /// Platform-specific implementations should set this with their own + /// platform-specific class that extends [GiphySelectorPlatform] when + /// they register themselves. + static set instance(GiphySelectorPlatform instance) { + PlatformInterface.verifyToken(instance, _token); + _instance = instance; + } + + Future getPlatformVersion() { + throw UnimplementedError('platformVersion() has not been implemented.'); + } +} diff --git a/lib/l10n.dart b/lib/l10n.dart new file mode 100644 index 0000000..e0fdbfb --- /dev/null +++ b/lib/l10n.dart @@ -0,0 +1,4 @@ +export 'src/client/src/l10n/default_localizations.dart' + show DefaultLocalizations, GiphyGetUILocalizationLabels; +export 'src/client/src/l10n/l10n.dart' + show GiphyGetUILocalizations, GiphyGetUILocalizationDelegate; diff --git a/lib/src/client/client.dart b/lib/src/client/client.dart new file mode 100644 index 0000000..f51d70a --- /dev/null +++ b/lib/src/client/client.dart @@ -0,0 +1,10 @@ +export 'src/client.dart'; +export 'src/collection.dart'; +export 'src/gif.dart'; +export 'src/image.dart'; +export 'src/images.dart'; +export 'src/l10n/l10n.dart'; +export 'src/languages.dart'; +export 'src/rating.dart'; +export 'src/type.dart'; +export 'src/user.dart'; diff --git a/lib/src/client/src/client.dart b/lib/src/client/src/client.dart new file mode 100644 index 0000000..f403705 --- /dev/null +++ b/lib/src/client/src/client.dart @@ -0,0 +1,158 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:math'; + +import 'package:http/http.dart'; + +import 'collection.dart'; +import 'gif.dart'; +import 'languages.dart'; +import 'rating.dart'; +import 'type.dart'; + +const _maxPaginationLimit = 100; + +class GiphyClient { + static final baseUri = Uri(scheme: 'https', host: 'api.giphy.com'); + + final String _apiKey; + final Client _client = Client(); + final String _randomID; + final String _apiVersion = 'v1'; + + GiphyClient({required String apiKey, required String randomId}) + : _apiKey = apiKey, + _randomID = randomId; + + Future trending({ + int offset = 0, + int limit = 30, + String rating = GiphyRating.g, + String lang = GiphyLanguage.english, + String type = GiphyType.gifs, + }) async { + return _fetchCollection( + baseUri.replace( + path: '$_apiVersion/$type/trending', + queryParameters: { + 'offset': '$offset', + 'limit': '${_effectiveLimit(limit)}', + 'rating': rating, + 'lang': lang + }, + ), + ); + } + + Future search( + String query, { + int offset = 0, + int limit = 30, + String rating = GiphyRating.g, + String lang = GiphyLanguage.english, + String type = GiphyType.gifs, + }) async { + return _fetchCollection( + baseUri.replace( + path: '$_apiVersion/$type/search', + queryParameters: { + 'q': query, + 'offset': '$offset', + 'limit': '${_effectiveLimit(limit)}', + 'rating': rating, + 'lang': lang, + }, + ), + ); + } + + Future emojis({ + int offset = 0, + int limit = 30, + String rating = GiphyRating.g, + String lang = GiphyLanguage.english, + }) async { + return _fetchCollection( + baseUri.replace( + path: '$_apiVersion/${GiphyType.emoji}', + queryParameters: { + 'offset': '$offset', + 'limit': '${_effectiveLimit(limit)}', + 'rating': rating, + 'lang': lang, + }, + ), + ); + } + + Future random({ + required String tag, + String rating = GiphyRating.g, + String type = GiphyType.gifs, + }) async { + return _fetchGif( + baseUri.replace( + path: '$_apiVersion/$type/random', + queryParameters: { + 'tag': tag, + 'rating': rating, + }, + ), + ); + } + + Future byId(String id) async => + _fetchGif(baseUri.replace(path: 'v1/gifs/$id')); + + Future getRandomId() async => + _getRandomId(baseUri.replace(path: 'v1/randomid')); + + int _effectiveLimit(int limit) => min(limit, _maxPaginationLimit); + + Future _fetchGif(Uri uri) async { + final response = await _getWithAuthorization(uri); + + return GiphyGif.fromJson((json.decode(response.body) + as Map)['data'] as Map); + } + + Future _fetchCollection(Uri uri) async { + final response = await _getWithAuthorization(uri); + + return GiphyCollection.fromJson( + json.decode(response.body) as Map); + } + + Future _getRandomId(Uri uri) async { + final response = await _getWithAuthorization(uri); + var decoded = json.decode(response.body); + return decoded["data"]["random_id"]; + } + + Future _getWithAuthorization(Uri uri) async { + Map queryParams = Map.from(uri.queryParameters) + ..putIfAbsent('api_key', () => _apiKey) + ..putIfAbsent('random_id', () => _randomID); + + final response = + await _client.get(uri.replace(queryParameters: queryParams)); + + if (response.statusCode == 200) { + return response; + } else { + throw GiphyClientError(response.statusCode, response.body); + } + } +} + +class GiphyClientError { + final int statusCode; + final String exception; + + GiphyClientError(this.statusCode, this.exception); + + @override + String toString() { + return 'GiphyClientError{statusCode: $statusCode, exception: $exception}'; + } +} diff --git a/lib/src/client/src/collection.dart b/lib/src/client/src/collection.dart new file mode 100644 index 0000000..4c6b047 --- /dev/null +++ b/lib/src/client/src/collection.dart @@ -0,0 +1,127 @@ +import 'gif.dart'; + +class GiphyCollection { + final List data; + final GiphyPagination? pagination; + final GiphyMeta? meta; + + GiphyCollection( + {required this.data, required this.pagination, required this.meta}); + + factory GiphyCollection.fromJson(Map json) { + return GiphyCollection( + data: json.containsKey('data') + ? (json['data'] as List) + .whereType>() + .map((e) => GiphyGif.fromJson(e)) + .toList(growable: false) + : List.empty(), + pagination: json.containsKey('pagination') + ? GiphyPagination.fromJson( + json['pagination'] as Map) + : null, + meta: json.containsKey('meta') + ? GiphyMeta.fromJson(json['meta'] as Map) + : null); + } + + Map toJson() => + {'data': data, 'pagination': pagination, 'meta': meta}; + + @override + String toString() { + return 'GiphyCollection{data: $data, pagination: $pagination, meta: $meta}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyCollection && + runtimeType == other.runtimeType && + data == other.data && + pagination == other.pagination && + meta == other.meta; + + @override + int get hashCode => data.hashCode ^ pagination.hashCode ^ meta.hashCode; +} + +class GiphyPagination { + final int totalCount; + final int count; + final int offset; + + GiphyPagination( + {required this.totalCount, required this.count, required this.offset}); + + factory GiphyPagination.fromJson(Map json) => + GiphyPagination( + totalCount: json['total_count'] as int? ?? 0, + count: json['count'] as int? ?? 0, + offset: json['offset'] as int? ?? 0); + + Map toJson() { + return { + 'total_count': totalCount, + 'count': count, + 'offset': offset + }; + } + + @override + String toString() { + return 'GiphyPagination{totalCount: $totalCount, count: $count, offset: $offset}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyPagination && + runtimeType == other.runtimeType && + totalCount == other.totalCount && + count == other.count && + offset == other.offset; + + @override + int get hashCode => totalCount.hashCode ^ count.hashCode ^ offset.hashCode; +} + +class GiphyMeta { + final int status; + final String msg; + + final String responseId; + + GiphyMeta( + {required this.status, required this.msg, required this.responseId}); + + factory GiphyMeta.fromJson(Map json) => GiphyMeta( + status: json['status'] as int? ?? 0, + msg: json['msg'] as String? ?? '', + responseId: json['response_id'] as String? ?? ''); + + Map toJson() { + return { + 'status': status, + 'msg': msg, + 'response_id': responseId + }; + } + + @override + String toString() { + return 'GiphyMeta{status: $status, msg: $msg, responseId: $responseId}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyMeta && + runtimeType == other.runtimeType && + status == other.status && + msg == other.msg && + responseId == other.responseId; + + @override + int get hashCode => status.hashCode ^ msg.hashCode ^ responseId.hashCode; +} diff --git a/lib/src/client/src/gif.dart b/lib/src/client/src/gif.dart new file mode 100644 index 0000000..706aba8 --- /dev/null +++ b/lib/src/client/src/gif.dart @@ -0,0 +1,143 @@ +import 'images.dart'; +import 'user.dart'; + +class GiphyGif { + String? title; + String? type; + String? id; + String? slug; + String? url; + String? bitlyGifUrl; + String? bitlyUrl; + String? embedUrl; + String? username; + String? source; + String? rating; + String? contentUrl; + String? sourceTld; + String? sourcePostUrl; + int? isSticker; + DateTime? importDatetime; + DateTime? trendingDatetime; + GiphyUser? user; + GiphyImages? images; + + GiphyGif({ + required this.title, + required this.type, + required this.id, + required this.slug, + required this.url, + required this.bitlyGifUrl, + required this.bitlyUrl, + required this.embedUrl, + required this.username, + required this.source, + required this.rating, + required this.contentUrl, + required this.sourceTld, + required this.sourcePostUrl, + required this.isSticker, + required this.importDatetime, + required this.trendingDatetime, + required this.user, + required this.images, + }); + + factory GiphyGif.fromJson(Map json) => GiphyGif( + title: json['title'], + type: json['type'], + id: json['id'], + slug: json['slug'], + url: json['url'], + bitlyGifUrl: json['bitly_gif_url'], + bitlyUrl: json['bitly_url'], + embedUrl: json['embed_url'], + username: json['username'], + source: json['source'], + rating: json['rating'], + contentUrl: json['content_url'], + sourceTld: json['source_tld'], + sourcePostUrl: json['source_post_url'], + isSticker: json['is_sticker'] as int, + importDatetime: DateTime.parse(json['import_datetime']), + trendingDatetime: DateTime.parse(json['trending_datetime']), + user: GiphyUser.fromJson(json['user'] as Map?), + images: GiphyImages.fromJson(json['images'] as Map)); + + Map toJson() { + return { + 'title': title, + 'type': type, + 'id': id, + 'slug': slug, + 'url': url, + 'bitly_gif_url': bitlyGifUrl, + 'bitly_url': bitlyUrl, + 'embed_url': embedUrl, + 'username': username, + 'source': source, + 'rating': rating, + 'content_url': contentUrl, + 'source_tld': sourceTld, + 'source_post_url': sourcePostUrl, + 'is_sticker': isSticker, + 'import_datetime': importDatetime?.toIso8601String(), + 'trending_datetime': trendingDatetime?.toIso8601String(), + 'user': user?.toJson(), + 'images': images?.toJson() + }; + } + + @override + String toString() { + return 'GiphyGif{title: $title, type: $type, id: $id, slug: $slug, url: $url, bitlyGifUrl: $bitlyGifUrl, bitlyUrl: $bitlyUrl, embedUrl: $embedUrl, username: $username, source: $source, rating: $rating, contentUrl: $contentUrl, sourceTld: $sourceTld, sourcePostUrl: $sourcePostUrl, isSticker: $isSticker, importDatetime: $importDatetime, trendingDatetime: $trendingDatetime, user: $user, images: $images}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyGif && + runtimeType == other.runtimeType && + title == other.title && + type == other.type && + id == other.id && + slug == other.slug && + url == other.url && + bitlyGifUrl == other.bitlyGifUrl && + bitlyUrl == other.bitlyUrl && + embedUrl == other.embedUrl && + username == other.username && + source == other.source && + rating == other.rating && + contentUrl == other.contentUrl && + sourceTld == other.sourceTld && + sourcePostUrl == other.sourcePostUrl && + isSticker == other.isSticker && + importDatetime == other.importDatetime && + trendingDatetime == other.trendingDatetime && + user == other.user && + images == other.images; + + @override + int get hashCode => + title.hashCode ^ + type.hashCode ^ + id.hashCode ^ + slug.hashCode ^ + url.hashCode ^ + bitlyGifUrl.hashCode ^ + bitlyUrl.hashCode ^ + embedUrl.hashCode ^ + username.hashCode ^ + source.hashCode ^ + rating.hashCode ^ + contentUrl.hashCode ^ + sourceTld.hashCode ^ + sourcePostUrl.hashCode ^ + isSticker.hashCode ^ + importDatetime.hashCode ^ + trendingDatetime.hashCode ^ + user.hashCode ^ + images.hashCode; +} diff --git a/lib/src/client/src/image.dart b/lib/src/client/src/image.dart new file mode 100644 index 0000000..b4d9133 --- /dev/null +++ b/lib/src/client/src/image.dart @@ -0,0 +1,462 @@ +class GiphyFullImage { + final String url; + final String width; + final String height; + final String size; + final String? mp4; + final String? mp4Size; + final String? webp; + final String? webpSize; + + GiphyFullImage({ + required this.url, + required this.width, + required this.height, + required this.size, + required this.mp4, + required this.mp4Size, + required this.webp, + required this.webpSize, + }); + + factory GiphyFullImage.fromJson(Map json) => GiphyFullImage( + url: json['url'], + width: json['width'], + height: json['height'], + size: json['size'], + mp4: json['mp4'], + mp4Size: json['mp4_size'], + webp: json['webp'], + webpSize: json['webp_size']); + + Map toJson() { + return { + 'url': url, + 'width': width, + 'height': height, + 'size': size, + 'mp4': mp4, + 'mp4_size': mp4Size, + 'webp': webp, + 'webp_size': webpSize + }; + } + + @override + String toString() { + return 'GiphyFullImage{url: $url, width: $width, height: $height, size: $size, mp4: $mp4, mp4Size: $mp4Size, webp: $webp, webpSize: $webpSize}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyFullImage && + runtimeType == other.runtimeType && + url == other.url && + width == other.width && + height == other.height && + size == other.size && + mp4 == other.mp4 && + mp4Size == other.mp4Size && + webp == other.webp && + webpSize == other.webpSize; + + @override + int get hashCode => + url.hashCode ^ + width.hashCode ^ + height.hashCode ^ + size.hashCode ^ + mp4.hashCode ^ + mp4Size.hashCode ^ + webp.hashCode ^ + webpSize.hashCode; +} + +class GiphyOriginalImage { + final String url; + final String width; + final String height; + final String size; + final String frames; + final String mp4; + final String mp4Size; + final String? webp; + final String? webpSize; + final String hash; + + GiphyOriginalImage({ + required this.url, + required this.width, + required this.height, + required this.size, + required this.frames, + required this.mp4, + required this.mp4Size, + required this.webp, + required this.webpSize, + required this.hash, + }); + + factory GiphyOriginalImage.fromJson(Map json) { + return GiphyOriginalImage( + url: json['url'], + width: json['width'], + height: json['height'], + size: json['size'], + frames: json['frames'], + mp4: json['mp4'], + mp4Size: json['mp4_size'], + webp: json['webp'], + webpSize: json['webp_size'], + hash: json['hash']); + } + + Map toJson() { + return { + 'url': url, + 'width': width, + 'height': height, + 'size': size, + 'frames': frames, + 'mp4': mp4, + 'mp4_size': mp4Size, + 'webp': webp, + 'webp_size': webpSize, + 'hash': hash + }; + } + + @override + String toString() { + return 'GiphyOriginalImage{url: $url, width: $width, height: $height, size: $size, frames: $frames, mp4: $mp4, mp4Size: $mp4Size, webp: $webp, webpSize: $webpSize, hash: $hash}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyOriginalImage && + runtimeType == other.runtimeType && + url == other.url && + width == other.width && + height == other.height && + size == other.size && + frames == other.frames && + mp4 == other.mp4 && + mp4Size == other.mp4Size && + webp == other.webp && + webpSize == other.webpSize && + hash == other.hash; + + @override + int get hashCode => + url.hashCode ^ + width.hashCode ^ + height.hashCode ^ + size.hashCode ^ + frames.hashCode ^ + mp4.hashCode ^ + mp4Size.hashCode ^ + webp.hashCode ^ + webpSize.hashCode ^ + hash.hashCode; +} + +class GiphyStillImage { + final String url; + final String width; + final String height; + final String size; + + GiphyStillImage({ + required this.url, + required this.width, + required this.height, + required this.size, + }); + + factory GiphyStillImage.fromJson(Map json) => + GiphyStillImage( + url: json['url'], + width: json['width'], + height: json['height'], + size: json['size'] ?? ''); + + Map toJson() { + return { + 'url': url, + 'width': width, + 'height': height, + 'size': size + }; + } + + @override + String toString() { + return 'GiphyStillImage{url: $url, width: $width, height: $height, size: $size}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyStillImage && + runtimeType == other.runtimeType && + url == other.url && + width == other.width && + height == other.height && + size == other.size; + + @override + int get hashCode => + url.hashCode ^ width.hashCode ^ height.hashCode ^ size.hashCode; +} + +class GiphyDownsampledImage { + final String url; + final String width; + final String height; + final String size; + final String? webp; + final String? webpSize; + + GiphyDownsampledImage({ + required this.url, + required this.width, + required this.height, + required this.size, + required this.webp, + required this.webpSize, + }); + + factory GiphyDownsampledImage.fromJson(Map json) { + return GiphyDownsampledImage( + url: json['url'], + width: json['width'], + height: json['height'], + size: json['size'], + webp: json['webp'], + webpSize: json['webp_size']); + } + + Map toJson() { + return { + 'url': url, + 'width': width, + 'height': height, + 'size': size, + 'webp': webp, + 'webp_size': webpSize + }; + } + + @override + String toString() { + return 'GiphyDownsampledImage{url: $url, width: $width, height: $height, size: $size, webp: $webp, webpSize: $webpSize}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyDownsampledImage && + runtimeType == other.runtimeType && + url == other.url && + width == other.width && + height == other.height && + size == other.size && + webp == other.webp && + webpSize == other.webpSize; + + @override + int get hashCode => + url.hashCode ^ + width.hashCode ^ + height.hashCode ^ + size.hashCode ^ + webp.hashCode ^ + webpSize.hashCode; +} + +class GiphyLoopingImage { + final String mp4; + final String mp4Size; + + GiphyLoopingImage({ + required this.mp4, + required this.mp4Size, + }); + + factory GiphyLoopingImage.fromJson(Map json) => + GiphyLoopingImage(mp4: json['mp4'], mp4Size: json['mp4_size']); + + Map toJson() => + {'mp4': mp4, 'mp4_size': mp4Size}; + + @override + String toString() { + return 'GiphyLoopingImage{mp4: $mp4, mp4Size: $mp4Size}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyLoopingImage && + runtimeType == other.runtimeType && + mp4 == other.mp4 && + mp4Size == other.mp4Size; + + @override + int get hashCode => mp4.hashCode ^ mp4Size.hashCode; +} + +class GiphyPreviewImage { + final String width; + final String height; + final String mp4; + final String mp4Size; + + GiphyPreviewImage({ + required this.width, + required this.height, + required this.mp4, + required this.mp4Size, + }); + + factory GiphyPreviewImage.fromJson(Map json) { + return GiphyPreviewImage( + width: json['width'], + height: json['height'], + mp4: json['mp4'] ?? '', + mp4Size: json['mp4_size'] ?? '', + ); + } + + Map toJson() { + return { + 'width': width, + 'height': height, + 'mp4': mp4, + 'mp4_size': mp4Size + }; + } + + @override + String toString() { + return 'GiphyPreviewImage{width: $width, height: $height, mp4: $mp4, mp4Size: $mp4Size}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyPreviewImage && + runtimeType == other.runtimeType && + width == other.width && + height == other.height && + mp4 == other.mp4 && + mp4Size == other.mp4Size; + + @override + int get hashCode => + width.hashCode ^ height.hashCode ^ mp4.hashCode ^ mp4Size.hashCode; +} + +class GiphyDownsizedImage { + final String url; + final String width; + final String height; + final String size; + + GiphyDownsizedImage({ + required this.url, + required this.width, + required this.height, + required this.size, + }); + + factory GiphyDownsizedImage.fromJson(Map json) { + return GiphyDownsizedImage( + url: json['url'], + width: json['width'], + height: json['height'], + size: json['size'], + ); + } + + Map toJson() { + return { + 'url': url, + 'width': width, + 'height': height, + 'size': size + }; + } + + @override + String toString() { + return 'GiphyDownsizedImage{url: $url, width: $width, height: $height, size: $size}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyDownsizedImage && + runtimeType == other.runtimeType && + url == other.url && + width == other.width && + height == other.height && + size == other.size; + + @override + int get hashCode => + url.hashCode ^ width.hashCode ^ height.hashCode ^ size.hashCode; +} + +class GiphyWebPImage { + final String url; + final String width; + final String height; + final String size; + + GiphyWebPImage({ + required this.url, + required this.width, + required this.height, + required this.size, + }); + + factory GiphyWebPImage.fromJson(Map json) { + return GiphyWebPImage( + url: json['url'], + width: json['width'], + height: json['height'], + size: json['size'], + ); + } + + Map toJson() { + return { + 'url': url, + 'width': width, + 'height': height, + 'size': size + }; + } + + @override + String toString() { + return 'GiphyWebPImage{url: $url, width: $width, height: $height, size: $size}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyWebPImage && + runtimeType == other.runtimeType && + url == other.url && + width == other.width && + height == other.height && + size == other.size; + + @override + int get hashCode => + url.hashCode ^ width.hashCode ^ height.hashCode ^ size.hashCode; +} diff --git a/lib/src/client/src/images.dart b/lib/src/client/src/images.dart new file mode 100644 index 0000000..5464ac1 --- /dev/null +++ b/lib/src/client/src/images.dart @@ -0,0 +1,235 @@ +import 'image.dart'; + +class GiphyImages { + GiphyStillImage fixedHeightStill; + GiphyStillImage originalStill; + GiphyFullImage fixedWidth; + GiphyStillImage? fixedHeightSmallStill; + GiphyDownsampledImage? fixedHeightDownsampled; + GiphyPreviewImage? preview; + GiphyFullImage? fixedHeightSmall; + GiphyStillImage? downsizedStill; + GiphyDownsizedImage? downsized; + GiphyDownsizedImage? downsizedLarge; + GiphyStillImage? fixedWidthSmallStill; + GiphyWebPImage? previewWebp; + GiphyStillImage? fixedWidthStill; + GiphyFullImage? fixedWidthSmall; + GiphyPreviewImage? downsizedSmall; + GiphyDownsampledImage? fixedWidthDownsampled; + GiphyPreviewImage? downsizedMedium; + GiphyOriginalImage? original; + GiphyFullImage? fixedHeight; + GiphyPreviewImage? hd; + GiphyLoopingImage? looping; + GiphyPreviewImage? originalMp4; + GiphyDownsizedImage? previewGif; + GiphyStillImage? w480Still; + + GiphyImages({ + required this.fixedHeightStill, + required this.originalStill, + required this.fixedWidth, + this.fixedHeightSmallStill, + this.fixedHeightDownsampled, + this.preview, + this.fixedHeightSmall, + this.downsizedStill, + this.downsized, + this.downsizedLarge, + this.fixedWidthSmallStill, + this.previewWebp, + this.fixedWidthStill, + this.fixedWidthSmall, + this.downsizedSmall, + this.fixedWidthDownsampled, + this.downsizedMedium, + this.original, + this.fixedHeight, + this.hd, + this.looping, + this.originalMp4, + this.previewGif, + this.w480Still, + }); + + factory GiphyImages.fromJson(Map json) { + return GiphyImages( + fixedHeightStill: GiphyStillImage.fromJson(json['fixed_height_still']), + originalStill: GiphyStillImage.fromJson(json['original_still']), + fixedWidth: GiphyFullImage.fromJson(json['fixed_width']), + fixedHeightSmallStill: json['fixed_height_small_still'] == null || + (json['fixed_height_small_still'] as Map).isEmpty + ? null + : GiphyStillImage.fromJson(json['fixed_height_small_still']), + fixedHeightDownsampled: json['fixed_height_downsampled'] == null || + (json['fixed_height_downsampled'] as Map).isEmpty + ? null + : GiphyDownsampledImage.fromJson(json['fixed_height_downsampled']), + preview: json['preview'] == null || + (json['preview'] as Map).isEmpty + ? null + : GiphyPreviewImage.fromJson(json['preview']), + fixedHeightSmall: json['fixed_height_small'] == null || + (json['fixed_height_small'] as Map).isEmpty + ? null + : GiphyFullImage.fromJson(json['fixed_height_small']), + downsizedStill: json['downsized_still'] == null || + (json['downsized_still'] as Map).isEmpty + ? null + : GiphyStillImage.fromJson(json['downsized_still']), + downsized: json['downsized'] == null || + (json['downsized'] as Map).isEmpty + ? null + : GiphyDownsizedImage.fromJson(json['downsized']), + downsizedLarge: json['downsized_large'] == null || + (json['downsized_large'] as Map).isEmpty + ? null + : GiphyDownsizedImage.fromJson(json['downsized_large']), + fixedWidthSmallStill: json['fixed_width_small_still'] == null || + (json['fixed_width_small_still'] as Map).isEmpty + ? null + : GiphyStillImage.fromJson(json['fixed_width_small_still']), + previewWebp: json['preview_webp'] == null || + (json['preview_webp'] as Map).isEmpty + ? null + : GiphyWebPImage.fromJson(json['preview_webp']), + fixedWidthStill: json['fixed_width_still'] == null || + (json['fixed_width_still'] as Map).isEmpty + ? null + : GiphyStillImage.fromJson(json['fixed_width_still']), + fixedWidthSmall: json['fixed_width_small'] == null || + (json['fixed_width_small'] as Map).isEmpty + ? null + : GiphyFullImage.fromJson(json['fixed_width_small']), + downsizedSmall: json['downsized_small'] == null || + (json['downsized_small'] as Map).isEmpty + ? null + : GiphyPreviewImage.fromJson(json['downsized_small']), + fixedWidthDownsampled: json['fixed_width_downsampled'] == null || + (json['fixed_width_downsampled'] as Map).isEmpty + ? null + : GiphyDownsampledImage.fromJson(json['fixed_width_downsampled']), + downsizedMedium: json['downsized_medium'] == null || + (json['downsized_medium'] as Map).isEmpty + ? null + : GiphyPreviewImage.fromJson(json['downsized_medium']), + original: json['original'] == null || + (json['original'] as Map).isEmpty + ? null + : GiphyOriginalImage.fromJson(json['original']), + fixedHeight: json['fixed_height'] == null || + (json['fixed_height'] as Map).isEmpty + ? null + : GiphyFullImage.fromJson(json['fixed_height']), + hd: json['hd'] == null ? null : GiphyPreviewImage.fromJson(json['hd']), + looping: json['looping'] == null || + (json['looping'] as Map).isEmpty + ? null + : GiphyLoopingImage.fromJson(json['looping']), + originalMp4: json['original_mp4'] == null || + (json['original_mp4'] as Map).isEmpty + ? null + : GiphyPreviewImage.fromJson(json['original_mp4']), + previewGif: json['preview_gif'] == null || + (json['preview_gif'] as Map).isEmpty + ? null + : GiphyDownsizedImage.fromJson(json['preview_gif']), + w480Still: json['480w_still'] == null || + (json['480w_still'] as Map).isEmpty + ? null + : GiphyStillImage.fromJson(json['480w_still']), + ); + } + + Map toJson() { + return { + 'fixed_height_still': fixedHeightStill.toJson(), + 'original_still': originalStill.toJson(), + 'fixed_width': fixedWidth.toJson(), + 'fixed_height_small_still': fixedHeightSmallStill?.toJson(), + 'fixed_height_downsampled': fixedHeightDownsampled?.toJson(), + 'preview': preview?.toJson(), + 'fixed_height_small': fixedHeightSmall?.toJson(), + 'downsized_still': downsizedStill?.toJson(), + 'downsized': downsized?.toJson(), + 'downsized_large': downsizedLarge?.toJson(), + 'fixed_width_small_still': fixedWidthSmallStill?.toJson(), + 'preview_webp': previewWebp?.toJson(), + 'fixed_width_still': fixedWidthStill?.toJson(), + 'fixed_width_small': fixedWidthSmall?.toJson(), + 'downsized_small': downsizedSmall?.toJson(), + 'fixed_width_downsampled': fixedWidthDownsampled?.toJson(), + 'downsized_medium': downsizedMedium?.toJson(), + 'original': original?.toJson(), + 'fixed_height': fixedHeight?.toJson(), + 'hd': hd?.toJson(), + 'looping': looping?.toJson(), + 'original_mp4': originalMp4?.toJson(), + 'preview_gif': previewGif?.toJson(), + '480w_still': w480Still?.toJson() + }; + } + + @override + String toString() { + return 'GiphyImages{fixedHeightStill: $fixedHeightStill, originalStill: $originalStill, fixedWidth: $fixedWidth, fixedHeightSmallStill: $fixedHeightSmallStill, fixedHeightDownsampled: $fixedHeightDownsampled, preview: $preview, fixedHeightSmall: $fixedHeightSmall, downsizedStill: $downsizedStill, downsized: $downsized, downsizedLarge: $downsizedLarge, fixedWidthSmallStill: $fixedWidthSmallStill, previewWebp: $previewWebp, fixedWidthStill: $fixedWidthStill, fixedWidthSmall: $fixedWidthSmall, downsizedSmall: $downsizedSmall, fixedWidthDownsampled: $fixedWidthDownsampled, downsizedMedium: $downsizedMedium, original: $original, fixedHeight: $fixedHeight, hd: $hd, looping: $looping, originalMp4: $originalMp4, previewGif: $previewGif, w480Still: $w480Still}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyImages && + runtimeType == other.runtimeType && + fixedHeightStill == other.fixedHeightStill && + originalStill == other.originalStill && + fixedWidth == other.fixedWidth && + fixedHeightSmallStill == other.fixedHeightSmallStill && + fixedHeightDownsampled == other.fixedHeightDownsampled && + preview == other.preview && + fixedHeightSmall == other.fixedHeightSmall && + downsizedStill == other.downsizedStill && + downsized == other.downsized && + downsizedLarge == other.downsizedLarge && + fixedWidthSmallStill == other.fixedWidthSmallStill && + previewWebp == other.previewWebp && + fixedWidthStill == other.fixedWidthStill && + fixedWidthSmall == other.fixedWidthSmall && + downsizedSmall == other.downsizedSmall && + fixedWidthDownsampled == other.fixedWidthDownsampled && + downsizedMedium == other.downsizedMedium && + original == other.original && + fixedHeight == other.fixedHeight && + hd == other.hd && + looping == other.looping && + originalMp4 == other.originalMp4 && + previewGif == other.previewGif && + w480Still == other.w480Still; + + @override + int get hashCode => + fixedHeightStill.hashCode ^ + originalStill.hashCode ^ + fixedWidth.hashCode ^ + fixedHeightSmallStill.hashCode ^ + fixedHeightDownsampled.hashCode ^ + preview.hashCode ^ + fixedHeightSmall.hashCode ^ + downsizedStill.hashCode ^ + downsized.hashCode ^ + downsizedLarge.hashCode ^ + fixedWidthSmallStill.hashCode ^ + previewWebp.hashCode ^ + fixedWidthStill.hashCode ^ + fixedWidthSmall.hashCode ^ + downsizedSmall.hashCode ^ + fixedWidthDownsampled.hashCode ^ + downsizedMedium.hashCode ^ + original.hashCode ^ + fixedHeight.hashCode ^ + hd.hashCode ^ + looping.hashCode ^ + originalMp4.hashCode ^ + previewGif.hashCode ^ + w480Still.hashCode; +} diff --git a/lib/src/client/src/l10n/default_localizations.dart b/lib/src/client/src/l10n/default_localizations.dart new file mode 100644 index 0000000..8465c2e --- /dev/null +++ b/lib/src/client/src/l10n/default_localizations.dart @@ -0,0 +1,31 @@ +import 'lang/en.dart'; +import 'lang/es.dart'; +import 'lang/fr.dart'; + +abstract class GiphyGetUILocalizationLabels { + const GiphyGetUILocalizationLabels(); + + String get searchInputLabel; + + String get gifsLabel; + + String get stickersLabel; + + String get emojisLabel; + + String get viewOnGiphy; + + String get moreBy; + + String get poweredByGiphy; +} + +const localizations = { + 'en': EnLocalizations(), + 'fr': FrLocalizations(), + 'es': EsLocalizations() +}; + +class DefaultLocalizations extends EnLocalizations { + const DefaultLocalizations(); +} diff --git a/lib/src/client/src/l10n/l10n.dart b/lib/src/client/src/l10n/l10n.dart new file mode 100644 index 0000000..c5af094 --- /dev/null +++ b/lib/src/client/src/l10n/l10n.dart @@ -0,0 +1,74 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; + +import 'default_localizations.dart'; +import 'lang/en.dart'; + +const kDefaultLocale = Locale('en'); + +class GiphyGetUILocalizations { + final Locale locale; + final T labels; + + const GiphyGetUILocalizations(this.locale, this.labels); + + static GiphyGetUILocalizations of(BuildContext context) { + final l = Localizations.of( + context, + GiphyGetUILocalizations, + ); + + if (l != null) { + return l; + } + + final defaultLocalizations = localizations[kDefaultLocale.languageCode]!; + return GiphyGetUILocalizations(kDefaultLocale, defaultLocalizations); + } + + static GiphyGetUILocalizationLabels labelsOf(BuildContext context) { + return GiphyGetUILocalizations.of(context).labels; + } + + static GiphyGetUILocalizationDelegate delegate = + const GiphyGetUILocalizationDelegate(); + + static GiphyGetUILocalizationDelegate + withDefaultOverrides(T overrides) { + return GiphyGetUILocalizationDelegate(overrides); + } +} + +class GiphyGetUILocalizationDelegate + extends LocalizationsDelegate { + final T? overrides; + final bool _forceSupportAllLocales; + + const GiphyGetUILocalizationDelegate([ + this.overrides, + this._forceSupportAllLocales = false, + ]); + + @override + bool isSupported(Locale locale) { + return _forceSupportAllLocales || + localizations.keys.contains(locale.languageCode); + } + + @override + Future load(Locale locale) { + final l = GiphyGetUILocalizations( + locale, + overrides ?? localizations[locale.languageCode]!, + ); + + return SynchronousFuture(l); + } + + @override + bool shouldReload( + covariant LocalizationsDelegate old, + ) { + return false; + } +} diff --git a/lib/src/client/src/l10n/lang/en.dart b/lib/src/client/src/l10n/lang/en.dart new file mode 100644 index 0000000..4b5f48c --- /dev/null +++ b/lib/src/client/src/l10n/lang/en.dart @@ -0,0 +1,34 @@ +import '../default_localizations.dart'; + +class EnLocalizations extends GiphyGetUILocalizationLabels { + @override + final String searchInputLabel; + + @override + final String emojisLabel; + + @override + final String gifsLabel; + + @override + final String stickersLabel; + + @override + final String moreBy; + + @override + final String viewOnGiphy; + + @override + final String poweredByGiphy; + + const EnLocalizations({ + this.searchInputLabel = 'Search GIPHY', + this.emojisLabel = 'Emojis', + this.gifsLabel = 'GIFs', + this.stickersLabel = 'Stickers', + this.moreBy = 'More by', + this.viewOnGiphy = 'View on GIPHY', + this.poweredByGiphy = 'Powered by GIPHY', + }); +} diff --git a/lib/src/client/src/l10n/lang/es.dart b/lib/src/client/src/l10n/lang/es.dart new file mode 100644 index 0000000..145027c --- /dev/null +++ b/lib/src/client/src/l10n/lang/es.dart @@ -0,0 +1,34 @@ +import '../default_localizations.dart'; + +class EsLocalizations extends GiphyGetUILocalizationLabels { + @override + final String searchInputLabel; + + @override + final String emojisLabel; + + @override + final String gifsLabel; + + @override + final String stickersLabel; + + @override + final String moreBy; + + @override + final String viewOnGiphy; + + @override + final String poweredByGiphy; + + const EsLocalizations({ + this.searchInputLabel = 'Buscar GIPHY', + this.emojisLabel = 'Emojis', + this.gifsLabel = 'Gifs', + this.stickersLabel = 'Stickers', + this.moreBy = 'Más de', + this.viewOnGiphy = 'Ver en GIPHY', + this.poweredByGiphy = 'Potenciado por GIPHY', + }); +} diff --git a/lib/src/client/src/l10n/lang/fr.dart b/lib/src/client/src/l10n/lang/fr.dart new file mode 100644 index 0000000..008497c --- /dev/null +++ b/lib/src/client/src/l10n/lang/fr.dart @@ -0,0 +1,34 @@ +import '../default_localizations.dart'; + +class FrLocalizations extends GiphyGetUILocalizationLabels { + @override + final String searchInputLabel; + + @override + final String emojisLabel; + + @override + final String gifsLabel; + + @override + final String stickersLabel; + + @override + final String moreBy; + + @override + final String viewOnGiphy; + + @override + final String poweredByGiphy; + + const FrLocalizations({ + this.searchInputLabel = 'Rechercher dans GIPHY', + this.emojisLabel = 'Emojis', + this.gifsLabel = 'GIFs', + this.stickersLabel = 'Stickers', + this.moreBy = 'Plus par', + this.viewOnGiphy = 'Voir sur GIPHY', + this.poweredByGiphy = 'Fourni par GIPHY', + }); +} diff --git a/lib/src/client/src/languages.dart b/lib/src/client/src/languages.dart new file mode 100644 index 0000000..e4e07e2 --- /dev/null +++ b/lib/src/client/src/languages.dart @@ -0,0 +1,34 @@ +class GiphyLanguage { + static const english = 'en'; + static const spanish = 'es'; + static const portuguese = 'pt'; + static const indonesian = 'id'; + static const french = 'fr'; + static const arabic = 'ar'; + static const turkish = 'tr'; + static const thai = 'th'; + static const vietnamese = 'vi'; + static const german = 'de'; + static const italian = 'it'; + static const japanese = 'ja'; + static const chineseSimplified = 'zh-CN'; + static const chineseTraditional = 'zh-TW'; + static const russian = 'ru'; + static const korean = 'ko'; + static const polish = 'pl'; + static const dutch = 'nl'; + static const romanian = 'ro'; + static const hungarian = 'hu'; + static const swedish = 'sv'; + static const czech = 'cs'; + static const hindi = 'hi'; + static const bengali = 'bn'; + static const danish = 'da'; + static const farsi = 'fa'; + static const filipino = 'tl'; + static const finnish = 'fi'; + static const hebrew = 'iw'; + static const malay = 'ms'; + static const norwegian = 'no'; + static const ukrainian = 'uk'; +} diff --git a/lib/src/client/src/rating.dart b/lib/src/client/src/rating.dart new file mode 100644 index 0000000..b653156 --- /dev/null +++ b/lib/src/client/src/rating.dart @@ -0,0 +1,7 @@ +class GiphyRating { + static const y = 'y'; + static const g = 'g'; + static const pg = 'pg'; + static const pg13 = 'pg-13'; + static const r = 'r'; +} diff --git a/lib/src/client/src/type.dart b/lib/src/client/src/type.dart new file mode 100644 index 0000000..1891cdb --- /dev/null +++ b/lib/src/client/src/type.dart @@ -0,0 +1,5 @@ +class GiphyType { + static const gifs = 'gifs'; + static const stickers = 'stickers'; + static const emoji = 'emoji'; +} diff --git a/lib/src/client/src/user.dart b/lib/src/client/src/user.dart new file mode 100644 index 0000000..2855ae1 --- /dev/null +++ b/lib/src/client/src/user.dart @@ -0,0 +1,170 @@ +class GiphyUser { + String? avatarUrl; + String? bannerUrl; + String? profileUrl; + String? username; + String? displayName; + String? twitter; + String? guid; + String? metadataDescription; + String? attributionDisplayName; + String? name; + String? description; + String? facebookUrl; + String? twitterUrl; + String? instagramUrl; + String? tumblrUrl; + bool? suppressChrome; + String? websiteUrl; + String? websiteDisplayUrl; + + GiphyUser({ + this.avatarUrl, + this.bannerUrl, + this.profileUrl, + this.username, + this.displayName, + this.twitter, + this.guid, + this.metadataDescription, + this.attributionDisplayName, + this.name, + this.description, + this.facebookUrl, + this.twitterUrl, + this.instagramUrl, + this.tumblrUrl, + this.suppressChrome, + this.websiteUrl, + this.websiteDisplayUrl, + }); + + factory GiphyUser.fromJson(Map? json) { + return GiphyUser( + avatarUrl: json != null && json.containsKey('avatar_url') + ? json['avatar_url'] + : null, + bannerUrl: json != null && json.containsKey('banner_url') + ? json['banner_url'] + : null, + profileUrl: json != null && json.containsKey('profile_url') + ? json['profile_url'] + : null, + username: json != null && json.containsKey('username') + ? json['username'] + : null, + displayName: json != null && json.containsKey('display_name') + ? json['display_name'] + : null, + twitter: + json != null && json.containsKey('twitter') ? json['twitter'] : null, + guid: json != null && json.containsKey('guid') ? json['guid'] : null, + metadataDescription: + json != null && json.containsKey('metadata_description') + ? json['metadata_description'] + : null, + attributionDisplayName: + json != null && json.containsKey('attribution_display_name') + ? json['attribution_display_name'] + : null, + name: json != null && json.containsKey('name') ? json['name'] : null, + description: json != null && json.containsKey('description') + ? json['description'] + : null, + facebookUrl: json != null && json.containsKey('facebook_url') + ? json['facebook_url'] + : null, + twitterUrl: json != null && json.containsKey('twitter_url') + ? json['twitter_url'] + : null, + instagramUrl: json != null && json.containsKey('instagram_url') + ? json['instagram_url'] + : null, + tumblrUrl: json != null && json.containsKey('tumblr_url') + ? json['tumblr_url'] + : null, + suppressChrome: json != null && json.containsKey('suppress_chrome') + ? json['suppress_chrome'] + : null, + websiteUrl: json != null && json.containsKey('website_url') + ? json['website_url'] + : null, + websiteDisplayUrl: json != null && json.containsKey('website_display_url') + ? json['website_display_url'] + : null, + ); + } + + Map toJson() { + return { + 'avatar_url': avatarUrl, + 'banner_url': bannerUrl, + 'profile_url': profileUrl, + 'username': username, + 'display_name': displayName, + 'twitter': twitter, + 'guid': guid, + 'metadata_description': metadataDescription, + 'attribution_display_name': attributionDisplayName, + 'name': name, + 'description': description, + 'facebook_url': facebookUrl, + 'twitter_url': twitterUrl, + 'instagram_url': instagramUrl, + 'tumblr_url': tumblrUrl, + 'suppress_chrome': suppressChrome, + 'website_url': websiteUrl, + 'website_display_url': websiteDisplayUrl, + }; + } + + @override + String toString() { + return 'GiphyUser{avatarUrl: $avatarUrl, bannerUrl: $bannerUrl, profileUrl: $profileUrl, username: $username, displayName: $displayName, twitter: $twitter, guid: $guid, metadataDescription: $metadataDescription, attributionDisplayName: $attributionDisplayName, name: $name, description: $description, facebookUrl: $facebookUrl, twitterUrl: $twitterUrl, instagramUrl: $instagramUrl, tumblrUrl: $tumblrUrl, suppressChrome: $suppressChrome, websiteUrl: $websiteUrl, websiteDisplayUrl: $websiteDisplayUrl}'; + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is GiphyUser && + runtimeType == other.runtimeType && + avatarUrl == other.avatarUrl && + bannerUrl == other.bannerUrl && + profileUrl == other.profileUrl && + username == other.username && + displayName == other.displayName && + twitter == other.twitter && + guid == other.guid && + metadataDescription == other.metadataDescription && + attributionDisplayName == other.attributionDisplayName && + name == other.name && + description == other.description && + facebookUrl == other.facebookUrl && + twitterUrl == other.twitterUrl && + instagramUrl == other.instagramUrl && + tumblrUrl == other.tumblrUrl && + suppressChrome == other.suppressChrome && + websiteUrl == other.websiteUrl && + websiteDisplayUrl == other.websiteDisplayUrl; + + @override + int get hashCode => + avatarUrl.hashCode ^ + bannerUrl.hashCode ^ + profileUrl.hashCode ^ + username.hashCode ^ + displayName.hashCode ^ + twitter.hashCode ^ + guid.hashCode ^ + metadataDescription.hashCode ^ + attributionDisplayName.hashCode ^ + name.hashCode ^ + description.hashCode ^ + facebookUrl.hashCode ^ + twitterUrl.hashCode ^ + instagramUrl.hashCode ^ + tumblrUrl.hashCode ^ + suppressChrome.hashCode ^ + websiteUrl.hashCode ^ + websiteDisplayUrl.hashCode; +} diff --git a/lib/src/widgets/config.dart b/lib/src/widgets/config.dart new file mode 100644 index 0000000..9bf4800 --- /dev/null +++ b/lib/src/widgets/config.dart @@ -0,0 +1,32 @@ +import 'package:flutter/widgets.dart'; + +import '../client/client.dart'; + +typedef OnSelectGiphyItem = void Function(GiphyGif); + +class GiphySelectorConfig extends InheritedWidget { + static GiphySelectorConfig of(BuildContext context) => + context.findAncestorWidgetOfExactType()!; + + const GiphySelectorConfig( + {super.key, + required this.apiKey, + required this.randomID, + required this.rating, + required this.language, + this.onSelectGiphyItem, + required super.child}); + + final String apiKey; + final String randomID; + final String rating; + final String language; + final OnSelectGiphyItem? onSelectGiphyItem; + + @override + bool updateShouldNotify(covariant GiphySelectorConfig oldWidget) => + oldWidget.apiKey != apiKey || + oldWidget.randomID != randomID || + oldWidget.rating != rating || + oldWidget.language != language; +} diff --git a/lib/src/widgets/giphy_gif.dart b/lib/src/widgets/giphy_gif.dart new file mode 100644 index 0000000..7d7afb2 --- /dev/null +++ b/lib/src/widgets/giphy_gif.dart @@ -0,0 +1,133 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher.dart'; + +import '../client/client.dart'; +import 'wrapper.dart'; + +class GiphyGifWidget extends StatefulWidget { + final GiphyGif gif; + final GiphySelectorWrapper giphyGetWrapper; + final bool showGiphyLabel; + final BorderRadius? borderRadius; + final Alignment imageAlignment; + + const GiphyGifWidget( + {Key? key, + required this.gif, + required this.giphyGetWrapper, + this.borderRadius, + this.imageAlignment = Alignment.center, + this.showGiphyLabel = true}) + : super(key: key); + + @override + State createState() => _GiphyGifWidgetState(); +} + +class _GiphyGifWidgetState extends State { + bool _showMenu = false; + Timer? _timerMenu; + + @override + void dispose() { + _timerMenu?.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final l = GiphyGetUILocalizations.labelsOf(context); + const TextStyle buttonsTextStyle = TextStyle( + fontSize: 12, + color: Colors.white, + ); + + return Stack( + alignment: widget.imageAlignment, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + GestureDetector( + onLongPress: () { + _triggerShowHideMenu(); + }, + onTap: () { + _timerMenu?.cancel(); + setState(() => _showMenu = false); + }, + child: Container( + width: double.parse(widget.gif.images!.fixedWidth.width), + height: double.parse(widget.gif.images!.fixedWidth.height), + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration( + borderRadius: widget.borderRadius, + ), + child: Image.network(widget.gif.images!.fixedWidth.url), + ), + ), + widget.showGiphyLabel + ? FittedBox( + child: Text( + l.poweredByGiphy, + style: const TextStyle(fontSize: 12), + )) + : Container() + ], + ), + IgnorePointer( + ignoring: !_showMenu, + child: AnimatedOpacity( + duration: const Duration(milliseconds: 200), + opacity: _showMenu ? 1 : 0, + child: Container( + height: 35, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.black.withOpacity(0.8), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + TextButton( + onPressed: () { + launchUrl(Uri.parse(widget.gif.url!)); + }, + child: Text( + l.viewOnGiphy, + style: buttonsTextStyle, + )), + const SizedBox( + height: 15, + child: VerticalDivider( + color: Colors.white54, + thickness: 1, + ), + ), + TextButton( + onPressed: () { + widget.giphyGetWrapper + .getGif('@${widget.gif.username}', context); + }, + child: Text('${l.moreBy} @${widget.gif.username}', + style: buttonsTextStyle)) + ], + ), + ), + ), + ) + ], + ); + } + + _triggerShowHideMenu() { + _timerMenu?.cancel(); + setState(() => _showMenu = true); + _timerMenu = Timer( + const Duration(seconds: 5), + () => setState(() => _showMenu = !_showMenu), + ); + } +} diff --git a/lib/src/widgets/search_controller.dart b/lib/src/widgets/search_controller.dart new file mode 100644 index 0000000..fab05f7 --- /dev/null +++ b/lib/src/widgets/search_controller.dart @@ -0,0 +1,20 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; + +const _debounceDuration = Duration(milliseconds: 500); + +class SearchController extends ValueNotifier { + SearchController(super.value); + + Timer? _debounce; + + @override + set value(String newValue) { + if (_debounce != null) _debounce!.cancel(); + _debounce = Timer(_debounceDuration, () async { + _debounce = null; + super.value = newValue; + }); + } +} diff --git a/lib/src/widgets/sheet.dart b/lib/src/widgets/sheet.dart new file mode 100644 index 0000000..6c97365 --- /dev/null +++ b/lib/src/widgets/sheet.dart @@ -0,0 +1,574 @@ +import 'dart:math'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; + +import '../client/client.dart'; +import 'config.dart'; +import 'search_controller.dart'; + +class GiphySelectorSheet extends StatefulWidget { + const GiphySelectorSheet( + {Key? key, + required this.apiKey, + this.onSelectGiphyItem, + this.searchText, + this.rating = GiphyRating.g, + this.lang = GiphyLanguage.english, + this.randomID = '', + this.tabColor}) + : super(key: key); + + final String apiKey; + final OnSelectGiphyItem? onSelectGiphyItem; + final String? searchText; + final String rating; + final String lang; + final String randomID; + final Color? tabColor; + + @override + State createState() => GiphySelectorSheetState(); +} + +const double _minExtent = 0.7; +const double _maxExtent = 0.95; + +class GiphySelectorSheetState extends State + with SingleTickerProviderStateMixin { + static GiphySelectorSheetState of(BuildContext context) => + context.findAncestorStateOfType()!; + + final _searchController = SearchController(""); + + late TabController _tabController; + late ScrollController _scrollController; + + bool isExpanded = false; + String? _tabType; + double _initialExtent = _minExtent; + + String? get tabType => _tabType; + + set tabType(value) { + if (mounted) setState(() => _tabType = value); + } + + double get initialExtent => _initialExtent; + + set initialExtent(double iExtent) => setState(() => _initialExtent = iExtent); + + @override + void initState() { + super.initState(); + _tabController = TabController(length: 3, vsync: this); + } + + @override + void dispose() { + super.dispose(); + _tabController.dispose(); + } + + @override + Widget build(BuildContext context) { + return GiphySelectorConfig( + apiKey: widget.apiKey, + randomID: widget.randomID, + rating: widget.rating, + language: widget.lang, + onSelectGiphyItem: widget.onSelectGiphyItem, + child: DraggableScrollableSheet( + expand: isExpanded, + minChildSize: _minExtent, + maxChildSize: _maxExtent, + initialChildSize: initialExtent, + builder: (ctx, scrollController) { + _scrollController = scrollController; + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + const GiphyTabTop(), + GiphyTabBar( + tabController: _tabController, + color: widget.tabColor, + ), + SearchAppBar( + scrollController: _scrollController, + searchController: _searchController, + ), + Expanded( + child: GiphyTabView( + tabController: _tabController, + scrollController: _scrollController, + searchController: _searchController, + ), + ), + const GiphyTabBottom() + ], + ); + }, + ), + ); + } +} + +class GiphyTabBar extends StatefulWidget { + const GiphyTabBar({Key? key, required this.tabController, this.color}) + : super(key: key); + final TabController tabController; + final Color? color; + + @override + State createState() => _GiphyTabBarState(); +} + +class _GiphyTabBarState extends State { + late List _tabs; + + @override + void didChangeDependencies() { + widget.tabController.addListener(() { + _setTabType(widget.tabController.index, context); + }); + WidgetsBinding.instance.addPostFrameCallback((_) { + _setTabType(0, context); + }); + final labels = GiphyGetUILocalizations.labelsOf(context); + _tabs = [ + Tab(text: labels.gifsLabel), + Tab(text: labels.stickersLabel), + Tab(text: labels.emojisLabel) + ]; + super.didChangeDependencies(); + } + + @override + Widget build(BuildContext context) { + return TabBar( + unselectedLabelColor: Theme.of(context).brightness == Brightness.light + ? Colors.black54 + : Colors.white54, + labelColor: widget.color ?? Theme.of(context).colorScheme.secondary, + indicatorColor: Colors.transparent, + indicatorSize: TabBarIndicatorSize.label, + controller: widget.tabController, + tabs: _tabs, + onTap: (int pos) => _setTabType(pos, context), + ); + } + + _setTabType(int pos, BuildContext context) { + final sheetState = GiphySelectorSheetState.of(context); + switch (widget.tabController.index) { + case 0: + sheetState.tabType = GiphyType.gifs; + break; + case 1: + sheetState.tabType = GiphyType.stickers; + break; + default: + sheetState.tabType = GiphyType.emoji; + } + } +} + +class GiphyTabTop extends StatefulWidget { + const GiphyTabTop({Key? key}) : super(key: key); + + @override + State createState() => _GiphyTabTopState(); +} + +class _GiphyTabTopState extends State { + @override + Widget build(BuildContext context) { + return Container( + margin: const EdgeInsets.symmetric(vertical: 8.0), + width: 50, + height: 2, + color: Theme.of(context).textTheme.bodyText1!.color!, + ); + } +} + +class SearchAppBar extends StatefulWidget { + const SearchAppBar( + {Key? key, + required this.scrollController, + required this.searchController}) + : super(key: key); + + final ScrollController scrollController; + final SearchController searchController; + + @override + State createState() => _SearchAppBarState(); +} + +class _SearchAppBarState extends State { + late TextEditingController _textEditingController; + + final FocusNode _focus = FocusNode(); + + @override + void initState() { + _focus.addListener(_focusListener); + _textEditingController = + TextEditingController(text: widget.searchController.value); + _textEditingController.addListener(() { + if (widget.searchController.value != _textEditingController.text) { + widget.searchController.value = _textEditingController.text; + } + }); + super.initState(); + } + + @override + void dispose() { + _textEditingController.dispose(); + _focus.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final l = GiphyGetUILocalizations.labelsOf(context); + final sheetState = GiphySelectorSheetState.of(context); + return Container( + padding: const EdgeInsets.only(left: 8, right: 8, bottom: 10), + child: Column( + children: [ + sheetState.tabType == GiphyType.emoji + // ? Container(height: 40.0, child: _giphyLogo()) + ? Container() + : SizedBox( + height: 40, + child: Center( + child: ClipRRect( + borderRadius: BorderRadius.circular(10), + child: TextField( + textAlignVertical: TextAlignVertical.center, + autofocus: false, + focusNode: _focus, + controller: _textEditingController, + decoration: InputDecoration( + filled: true, + prefixIcon: kIsWeb + ? const Icon(Icons.search) + : ShaderMask( + shaderCallback: (bounds) => + const LinearGradient( + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: [ + Color(0xFFFF6666), + Color(0xFF9933FF), + ]).createShader(bounds), + child: Transform( + alignment: Alignment.center, + transform: Matrix4.rotationY(pi), + child: const Icon( + Icons.search, + color: Colors.white, + )), + ), + hintText: l.searchInputLabel, + suffixIcon: IconButton( + icon: Icon( + Icons.clear, + color: Theme.of(context) + .textTheme + .bodyText1! + .color!, + ), + onPressed: () { + setState(() { + _textEditingController.clear(); + }); + }), + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + errorBorder: InputBorder.none, + disabledBorder: InputBorder.none, + ), + autocorrect: false, + ), + ), + ), + ), + ], + ), + ); + } + + void _focusListener() { + final sheetState = GiphySelectorSheetState.of(context); + if (_focus.hasFocus && sheetState.initialExtent == _minExtent) { + sheetState.initialExtent = _maxExtent; + } + } +} + +class GiphyTabBottom extends StatelessWidget { + const GiphyTabBottom({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(top: 10.0), + child: Center(child: _giphyLogo(context)), + ); + } + + Widget _giphyLogo(BuildContext context) { + const basePath = "assets/img/"; + String logoPath = Theme.of(context).brightness == Brightness.light + ? "poweredby_dark.png" + : "poweredby_light.png"; + + return Container( + width: double.maxFinite, + height: 15, + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.fitHeight, + image: AssetImage( + "$basePath$logoPath", + package: 'giphy_selector', + ))), + ); + } +} + +class GiphyTabView extends StatelessWidget { + const GiphyTabView( + {Key? key, + required this.scrollController, + required this.tabController, + required this.searchController}) + : super(key: key); + + final ScrollController scrollController; + final TabController tabController; + final SearchController searchController; + + @override + Widget build(BuildContext context) { + return TabBarView( + controller: tabController, + children: [ + GiphyTabDetail( + type: GiphyType.gifs, + scrollController: scrollController, + searchController: searchController, + key: null, + ), + GiphyTabDetail( + type: GiphyType.stickers, + scrollController: scrollController, + searchController: searchController, + ), + GiphyTabDetail( + type: GiphyType.emoji, + scrollController: scrollController, + searchController: searchController, + ) + ], + ); + } +} + +class GiphyTabDetail extends StatefulWidget { + const GiphyTabDetail( + {Key? key, + required this.type, + required this.scrollController, + required this.searchController}) + : super(key: key); + + final String type; + final ScrollController scrollController; + final SearchController searchController; + + @override + State createState() => _GiphyTabDetailState(); +} + +class _GiphyTabDetailState extends State { + final Axis _scrollDirection = Axis.vertical; + final double _spacing = 8.0; + + late int _crossAxisCount; + late double _gifWidth; + late int _limit; + + GiphyCollection? _collection; + List _list = []; + + bool _isLoading = false; + int offset = 0; + + @override + void initState() { + super.initState(); + switch (widget.type) { + case GiphyType.gifs: + _gifWidth = 200.0; + break; + case GiphyType.stickers: + _gifWidth = 150.0; + break; + case GiphyType.emoji: + _gifWidth = 80.0; + break; + default: + break; + } + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + widget.scrollController.addListener(_scrollListener); + widget.searchController.addListener(_listenerQuery); + _crossAxisCount = (MediaQuery.of(context).size.width / _gifWidth).round(); + int mainAxisCount = + ((MediaQuery.of(context).size.height - 30) / _gifWidth).round(); + _limit = _crossAxisCount * mainAxisCount; + offset = 0; + _loadMore(); + } + + @override + void dispose() { + widget.scrollController.removeListener(_scrollListener); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + if (_list.isEmpty) { + return const Center( + child: CircularProgressIndicator(), + ); + } + final config = GiphySelectorConfig.of(context); + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + // child: StaggeredGrid.countB + child: MasonryGridView.count( + scrollDirection: _scrollDirection, + controller: widget.scrollController, + itemCount: _list.length, + crossAxisCount: _crossAxisCount, + mainAxisSpacing: _spacing, + crossAxisSpacing: _spacing, + itemBuilder: (ctx, idx) { + GiphyGif gif = _list[idx]; + double aspectRatio = (double.parse(gif.images!.fixedWidth.width) / + double.parse(gif.images!.fixedWidth.height)); + return ClipRRect( + borderRadius: BorderRadius.circular(10.0), + child: InkWell( + onTap: () => (config.onSelectGiphyItem ?? _selectedGif).call(gif), + child: gif.images == null || gif.images?.fixedWidth.webp == null + ? Container() + : Image.network( + gif.images!.fixedWidth.webp!, + gaplessPlayback: true, + fit: BoxFit.fill, + headers: const {'accept': 'image/*'}, + loadingBuilder: (context, child, loadingProgress) { + if (loadingProgress == null) { + return child; + } + return AspectRatio( + aspectRatio: aspectRatio, + child: Container(color: Theme.of(context).cardColor), + ); + }, + errorBuilder: (context, exception, stackTrace) { + return AspectRatio( + aspectRatio: aspectRatio, + child: Container( + color: Theme.of(context).cardColor, + ), + ); + }, + ), + ), + ); + }, + ), + ); + } + + Future _loadMore() async { + //Return if is loading or no more gifs + if (_isLoading || _collection?.pagination?.totalCount == _list.length) { + return; + } + + _isLoading = true; + final config = GiphySelectorConfig.of(context); + final client = + GiphyClient(apiKey: config.apiKey, randomId: config.randomID); + + // Offset pagination for query + if (_collection == null) { + offset = 0; + } else { + offset = _collection!.pagination!.offset + _collection!.pagination!.count; + } + + // Get Gif or Emoji + if (widget.type == GiphyType.emoji) { + _collection = await client.emojis(offset: offset, limit: _limit); + } else { + final query = widget.searchController.value; + if (query.isNotEmpty) { + _collection = await client.search(query, + lang: config.language, + offset: offset, + rating: config.rating, + type: widget.type, + limit: _limit); + } else { + _collection = await client.trending( + lang: config.language, + offset: offset, + rating: config.rating, + type: widget.type, + limit: _limit); + } + } + + // Set result to list + if (_collection!.data.isNotEmpty && mounted) { + setState(() { + _list.addAll(_collection!.data); + }); + } + + _isLoading = false; + } + + void _scrollListener() { + if (widget.scrollController.positions.last.extentAfter < 500 && + !_isLoading) { + _loadMore(); + } + } + + void _selectedGif(GiphyGif gif) { + Navigator.pop(context, gif); + } + + void _listenerQuery() { + _collection = null; + _list = []; + _loadMore(); + } +} diff --git a/lib/src/widgets/wrapper.dart b/lib/src/widgets/wrapper.dart new file mode 100644 index 0000000..c3dfc8b --- /dev/null +++ b/lib/src/widgets/wrapper.dart @@ -0,0 +1,103 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:giphy_selector/src/widgets/config.dart'; + +import '../client/client.dart'; +import 'sheet.dart'; + +class GiphySelector { + static Future getGif({ + required BuildContext context, + required String apiKey, + String rating = GiphyRating.g, + String lang = GiphyLanguage.english, + String randomID = '', + String searchText = '', + String queryText = '', + bool modal = true, + Color? tabColor, + }) async { + if (apiKey.isEmpty) { + throw Exception('apiKey must be not null or not empty'); + } + + return showModalBottomSheet( + clipBehavior: Clip.antiAlias, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical(top: Radius.circular(10.0))), + isScrollControlled: true, + context: context, + builder: (ctx) => GiphySelectorSheet( + apiKey: apiKey, + lang: lang, + randomID: randomID, + rating: rating, + searchText: searchText, + tabColor: tabColor, + ), + ); + } + + static Future show({ + required BuildContext context, + required String apiKey, + required OnSelectGiphyItem onSelectGiphyItem, + String rating = GiphyRating.g, + String lang = GiphyLanguage.english, + String randomID = '', + String searchText = '', + String queryText = '', + bool modal = true, + Color? tabColor, + }) { + if (apiKey.isEmpty) { + throw Exception('apiKey must be not null or not empty'); + } + + return showModalBottomSheet( + clipBehavior: Clip.antiAlias, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical(top: Radius.circular(10.0)), + ), + isScrollControlled: true, + context: context, + builder: (ctx) => GiphySelectorSheet( + apiKey: apiKey, + lang: lang, + randomID: randomID, + rating: rating, + searchText: searchText, + tabColor: tabColor, + onSelectGiphyItem: onSelectGiphyItem, + ), + ); + } +} + +typedef GiphySelectorWrapperBuilder = Widget Function( + Stream, GiphySelectorWrapper); + +class GiphySelectorWrapper extends StatelessWidget { + final String apiKey; + final GiphySelectorWrapperBuilder builder; + final streamController = StreamController.broadcast(); + + GiphySelectorWrapper({Key? key, required this.apiKey, required this.builder}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return builder(streamController.stream, this); + } + + getGif(String queryText, BuildContext context) async { + GiphyGif? gif = await GiphySelector.getGif( + queryText: queryText, + context: context, + apiKey: apiKey, + lang: GiphyLanguage.spanish, + ); + if (gif != null) streamController.add(gif); + } +} diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..feaa7d6 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,34 @@ +name: giphy_selector +description: A Flutter plugin enabling the selection of a GIPHY GIF, Sticker or Emoji +version: 1.1.0 +homepage: https://github.com/amantoux/giphy_selector + + +environment: + sdk: ">=2.18.0 <3.0.0" + flutter: ">=1.17.0" + +dependencies: + flutter: + sdk: flutter + flutter_localizations: + sdk: flutter + + flutter_staggered_grid_view: ^0.6.0 + http: ^0.13.3 + url_launcher: ^6.1.6 + + +dev_dependencies: + flutter_test: + sdk: flutter + integration_test: + sdk: flutter + flutter_lints: + mockito: ^5.0.7 + pedantic: ^1.11.0 + matcher: ^0.12.10 + +flutter: + assets: + - assets/img/ diff --git a/test/data/by_id.dart b/test/data/by_id.dart new file mode 100644 index 0000000..b0f9568 --- /dev/null +++ b/test/data/by_id.dart @@ -0,0 +1,191 @@ +const byIdBody = '''{ + "data": { + "type": "gif", + "id": "l46Cc0Ped9R0uiTkY", + "slug": "betawards-bet-awards-2016-l46Cc0Ped9R0uiTkY", + "url": "https://giphy.com/gifs/betawards-bet-awards-2016-l46Cc0Ped9R0uiTkY", + "bitly_gif_url": "https://gph.is/28XXBEP", + "bitly_url": "https://gph.is/28XXBEP", + "embed_url": "https://giphy.com/embed/l46Cc0Ped9R0uiTkY", + "username": "betawards", + "source": "", + "rating": "g", + "content_url": "", + "source_tld": "", + "source_post_url": "", + "is_sticker": 0, + "import_datetime": "2016-06-27 00:04:35", + "trending_datetime": "2018-04-15 17:00:00", + "user": { + "avatar_url": "https://media2.giphy.com/avatars/betawards/A7Agt5O0ZAyX.jpg", + "banner_url": "", + "profile_url": "https://giphy.com/betawards/", + "username": "betawards", + "display_name": "BET Awards", + "twitter": "@betwards" + }, + "images": { + "fixed_height_still": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200_s.gif", + "width": "362", + "height": "200" + }, + "original_still": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy_s.gif", + "width": "480", + "height": "265" + }, + "fixed_width": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200w.gif", + "width": "200", + "height": "110", + "size": "326898", + "mp4": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200w.mp4", + "mp4_size": "42546", + "webp": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200w.webp", + "webp_size": "145402" + }, + "fixed_height_small_still": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/100_s.gif", + "width": "181", + "height": "100" + }, + "fixed_height_downsampled": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200_d.gif", + "width": "362", + "height": "200", + "size": "177392", + "webp": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200_d.webp", + "webp_size": "64354" + }, + "preview": { + "width": "206", + "height": "112", + "mp4": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy-preview.mp4", + "mp4_size": "45459" + }, + "fixed_height_small": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/100.gif", + "width": "181", + "height": "100", + "size": "288733", + "mp4": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/100.mp4", + "mp4_size": "34806", + "webp": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/100.webp", + "webp_size": "129928" + }, + "downsized_still": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy-downsized_s.gif", + "width": "480", + "height": "265", + "size": "58234" + }, + "downsized": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy-downsized.gif", + "width": "480", + "height": "265", + "size": "1752750" + }, + "downsized_large": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy.gif", + "width": "480", + "height": "265", + "size": "1752750" + }, + "fixed_width_small_still": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/100w_s.gif", + "width": "100", + "height": "55" + }, + "preview_webp": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy-preview.webp", + "width": "270", + "height": "149", + "size": "49774" + }, + "fixed_width_still": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200w_s.gif", + "width": "200", + "height": "110" + }, + "fixed_width_small": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/100w.gif", + "width": "100", + "height": "55", + "size": "102006", + "mp4": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/100w.mp4", + "mp4_size": "15934", + "webp": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/100w.webp", + "webp_size": "55360" + }, + "downsized_small": { + "width": "480", + "height": "264", + "mp4": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy-downsized-small.mp4", + "mp4_size": "171589" + }, + "fixed_width_downsampled": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200w_d.gif", + "width": "200", + "height": "110", + "size": "58308", + "webp": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200w_d.webp", + "webp_size": "24782" + }, + "downsized_medium": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy.gif", + "width": "480", + "height": "265", + "size": "1752750" + }, + "original": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy.gif", + "width": "480", + "height": "265", + "size": "1752750", + "frames": "34", + "mp4": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy.mp4", + "mp4_size": "171542", + "webp": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy.webp", + "webp_size": "643260" + }, + "fixed_height": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200.gif", + "width": "362", + "height": "200", + "size": "1023635", + "mp4": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200.mp4", + "mp4_size": "94811", + "webp": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/200.webp", + "webp_size": "367150" + }, + "looping": { + "mp4": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy-loop.mp4", + "mp4_size": "1647254" + }, + "original_mp4": { + "width": "480", + "height": "264", + "mp4": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy.mp4", + "mp4_size": "171542" + }, + "preview_gif": { + "url": "https://media1.giphy.com/media/l46Cc0Ped9R0uiTkY/giphy-preview.gif", + "width": "168", + "height": "93", + "size": "49126" + }, + "480w_still": { + "url": "https://media0.giphy.com/media/l46Cc0Ped9R0uiTkY/480w_s.jpg", + "width": "480", + "height": "265" + } + }, + "title": "beyonce freedom GIF by BET Awards" + }, + "meta": { + "status": 200, + "msg": "OK", + "response_id": "5ae47dbf3346303055120b53" + } +}'''; diff --git a/test/data/emoji.dart b/test/data/emoji.dart new file mode 100644 index 0000000..500b10b --- /dev/null +++ b/test/data/emoji.dart @@ -0,0 +1,4944 @@ +const emojiBody = ''' + +{ + "data":[ + { + "type":"gif", + "id":"Ieo88333eatH73xKQG", + "url":"https://giphy.com/stickers/Emoji-emoji-zoom-animated-Ieo88333eatH73xKQG", + "slug":"Emoji-emoji-zoom-animated-Ieo88333eatH73xKQG", + "bitly_gif_url":"https://gph.is/st/EOBg4Km", + "bitly_url":"https://gph.is/st/EOBg4Km", + "embed_url":"https://giphy.com/embed/Ieo88333eatH73xKQG", + "username":"Emoji", + "source":"", + "title":"Zoom Laptop Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-04-21 00:41:39", + "trending_datetime":"2020-04-28 07:00:04", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"1076113", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1597512", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3088", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"49", + "hash":"6144a328502bf37029f6310d852ac2d9", + "height":"480", + "mp4":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"150153", + "size":"1597512", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"380194", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"42822", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"30882", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1597512", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"7848", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1597512", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1597512", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"212", + "size":"48410", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"212" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"150153", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"19303", + "size":"147183", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"61196", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"48652", + "size":"364085", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"132858", + "width":"200" + }, + "downsized_small":{ + "height":"408", + "mp4":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"59188", + "width":"408" + }, + "preview":{ + "height":"204", + "mp4":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"21761", + "width":"204" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"42822", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"30882", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3088", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"19303", + "size":"147183", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"61196", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"39446", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"7848", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"2055475" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"48652", + "size":"364085", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"132858", + "width":"200" + }, + "preview_gif":{ + "height":"160", + "size":"48882", + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"160" + }, + "480w_still":{ + "url":"https://media0.giphy.com/media/Ieo88333eatH73xKQG/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"KGe942jhOF493O5a4U", + "url":"https://giphy.com/stickers/Emoji-emoji-soap-animated-KGe942jhOF493O5a4U", + "slug":"Emoji-emoji-soap-animated-KGe942jhOF493O5a4U", + "bitly_gif_url":"https://gph.is/st/me8X5JY", + "bitly_url":"https://gph.is/st/me8X5JY", + "embed_url":"https://giphy.com/embed/KGe942jhOF493O5a4U", + "username":"Emoji", + "source":"", + "title":"Bubbles Soap Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-04-17 14:26:51", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"415658", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1258559", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"2618", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"49", + "hash":"ae82585e9623a6c07c5bc3703fc7808a", + "height":"480", + "mp4":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"72177", + "size":"1258559", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"271356", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"30127", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"21968", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1258559", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"5539", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1258559", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1258559", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"204", + "size":"48836", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"204" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"72177", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"11839", + "size":"125469", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"58634", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"24273", + "size":"265181", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"136108", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"135883", + "width":"480" + }, + "preview":{ + "height":"290", + "mp4":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"17828", + "width":"290" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"30127", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"21968", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"2618", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"11839", + "size":"125469", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"58634", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"36445", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"5539", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"1015951" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"24273", + "size":"265181", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"136108", + "width":"200" + }, + "preview_gif":{ + "height":"170", + "size":"48330", + "url":"https://media1.giphy.com/media/KGe942jhOF493O5a4U/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"170" + }, + "480w_still":{ + "url":"https://media2.giphy.com/media/KGe942jhOF493O5a4U/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"dalJ0CpF7hwmN1nZXe", + "url":"https://giphy.com/stickers/Emoji-thumbs-up-emoji-animated-dalJ0CpF7hwmN1nZXe", + "slug":"Emoji-thumbs-up-emoji-animated-dalJ0CpF7hwmN1nZXe", + "bitly_gif_url":"https://gph.is/st/ERy3V5m", + "bitly_url":"https://gph.is/st/ERy3V5m", + "embed_url":"https://giphy.com/embed/dalJ0CpF7hwmN1nZXe", + "username":"Emoji", + "source":"", + "title":"Animated Emoji Thumbs Up Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-04-16 23:38:11", + "trending_datetime":"2020-07-20 20:15:10", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"525664", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1385240", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"2612", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"49", + "hash":"ac2c94f785425c8798b98133b1352648", + "height":"480", + "mp4":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"110192", + "size":"1385240", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"234808", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"31785", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"21024", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1385240", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"5500", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1385240", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1385240", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"210", + "size":"49318", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"210" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"110192", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"15710", + "size":"126448", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"59776", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"34265", + "size":"266323", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"129792", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"142158", + "width":"480" + }, + "preview":{ + "height":"284", + "mp4":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"25044", + "width":"284" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"31785", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"21024", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"2612", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"15710", + "size":"126448", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"59776", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"42977", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"5500", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"1100044" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"34265", + "size":"266323", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"129792", + "width":"200" + }, + "preview_gif":{ + "height":"158", + "size":"49937", + "url":"https://media4.giphy.com/media/dalJ0CpF7hwmN1nZXe/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"158" + }, + "480w_still":{ + "url":"https://media2.giphy.com/media/dalJ0CpF7hwmN1nZXe/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"QTxCEgcvorSGCSXxKE", + "url":"https://giphy.com/stickers/Emoji-emoji-animated-shelter-in-place-QTxCEgcvorSGCSXxKE", + "slug":"Emoji-emoji-animated-shelter-in-place-QTxCEgcvorSGCSXxKE", + "bitly_gif_url":"https://gph.is/st/ENx5KWY", + "bitly_url":"https://gph.is/st/ENx5KWY", + "embed_url":"https://giphy.com/embed/QTxCEgcvorSGCSXxKE", + "username":"Emoji", + "source":"", + "title":"Animated Emoji Stay Home Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-04-16 19:38:59", + "trending_datetime":"2020-06-28 04:30:10", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"757012", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1743636", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"2789", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"61", + "hash":"492c9819915339a57eb254ea87786e8a", + "height":"480", + "mp4":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"126911", + "size":"1743636", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"420628", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"33436", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"27706", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1743636", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"5861", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1743636", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1743636", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"194", + "size":"49670", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"194" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"126911", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"19518", + "size":"166147", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"94378", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"40990", + "size":"352717", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"186144", + "width":"200" + }, + "downsized_small":{ + "height":"408", + "mp4":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"58789", + "width":"408" + }, + "preview":{ + "height":"384", + "mp4":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"28633", + "width":"384" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"33436", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"27706", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"2789", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"19518", + "size":"166147", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"94378", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"51097", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"5861", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"1672993" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"40990", + "size":"352717", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"186144", + "width":"200" + }, + "preview_gif":{ + "height":"130", + "size":"48197", + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"130" + }, + "480w_still":{ + "url":"https://media3.giphy.com/media/QTxCEgcvorSGCSXxKE/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"LPkczVwUYcMbXsRCdP", + "url":"https://giphy.com/stickers/Emoji-emoji-covid-covid-19-LPkczVwUYcMbXsRCdP", + "slug":"Emoji-emoji-covid-covid-19-LPkczVwUYcMbXsRCdP", + "bitly_gif_url":"https://gph.is/st/ER5q5wm", + "bitly_url":"https://gph.is/st/ER5q5wm", + "embed_url":"https://giphy.com/embed/LPkczVwUYcMbXsRCdP", + "username":"Emoji", + "source":"", + "title":"Look Looking Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-04-15 22:02:36", + "trending_datetime":"2020-08-09 21:00:05", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"688010", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"2095275", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3269", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"61", + "hash":"9f9adfa6f52bb13d1656fcb9f4c8ac1a", + "height":"480", + "mp4":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"104725", + "size":"2095275", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"480636", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"43140", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"30868", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"21307", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy-downsized_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"7480", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"2095275", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1191094", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy-downsized.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized.gif", + "width":"480" + }, + "preview_webp":{ + "height":"192", + "size":"49406", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"192" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"104725", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"15180", + "size":"186103", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"78820", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"34152", + "size":"430679", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"190802", + "width":"200" + }, + "downsized_small":{ + "height":"420", + "mp4":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"47488", + "width":"420" + }, + "preview":{ + "height":"384", + "mp4":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"25521", + "width":"384" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"43140", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"30868", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3269", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"15180", + "size":"186103", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"78820", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"50186", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"7480", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"1582224" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"34152", + "size":"430679", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"190802", + "width":"200" + }, + "preview_gif":{ + "height":"143", + "size":"48780", + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"143" + }, + "480w_still":{ + "url":"https://media2.giphy.com/media/LPkczVwUYcMbXsRCdP/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"IbaaxVxgaZAZx9ddJ4", + "url":"https://giphy.com/stickers/Emoji-emoji-covid-covid-19-IbaaxVxgaZAZx9ddJ4", + "slug":"Emoji-emoji-covid-covid-19-IbaaxVxgaZAZx9ddJ4", + "bitly_gif_url":"https://gph.is/st/myVq3VE", + "bitly_url":"https://gph.is/st/myVq3VE", + "embed_url":"https://giphy.com/embed/IbaaxVxgaZAZx9ddJ4", + "username":"Emoji", + "source":"", + "title":"Joy Mask Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-04-15 21:41:33", + "trending_datetime":"2020-06-08 17:30:08", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"641391", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"939714", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3332", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"24", + "hash":"9efe39fbce628204e851962cac817d45", + "height":"480", + "mp4":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"85505", + "size":"939714", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"196592", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"50506", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"32786", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"939714", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"7689", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"939714", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"939714", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"164", + "size":"48708", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"164" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"85505", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"13719", + "size":"76187", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"39644", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"28802", + "size":"188558", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"81584", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"168901", + "width":"480" + }, + "preview":{ + "height":"260", + "mp4":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"18329", + "width":"260" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"50506", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"32786", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3332", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"13719", + "size":"76187", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"39644", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"57996", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"7689", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"2583221" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"28802", + "size":"188558", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"81584", + "width":"200" + }, + "preview_gif":{ + "height":"142", + "size":"49093", + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"142" + }, + "480w_still":{ + "url":"https://media2.giphy.com/media/IbaaxVxgaZAZx9ddJ4/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"kyzzHEoaLAAr9nX4fy", + "url":"https://giphy.com/stickers/Emoji-emoji-covid-covid-19-kyzzHEoaLAAr9nX4fy", + "slug":"Emoji-emoji-covid-covid-19-kyzzHEoaLAAr9nX4fy", + "bitly_gif_url":"https://gph.is/st/MB25PPM", + "bitly_url":"https://gph.is/st/MB25PPM", + "embed_url":"https://giphy.com/embed/kyzzHEoaLAAr9nX4fy", + "username":"Emoji", + "source":"", + "title":"Embarrassed Mask Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-04-15 21:41:23", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"684995", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1753536", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3040", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"48", + "hash":"fc6465b730eab5f372737a1a34cf6895", + "height":"480", + "mp4":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"93033", + "size":"1753536", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"352742", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"46744", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"28992", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1753536", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"6648", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1753536", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1753536", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"192", + "size":"49084", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"192" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"93033", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"14779", + "size":"145042", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"70574", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"30302", + "size":"338883", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"144404", + "width":"200" + }, + "downsized_small":{ + "height":"428", + "mp4":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"44706", + "width":"428" + }, + "preview":{ + "height":"214", + "mp4":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"15125", + "width":"214" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"46744", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"28992", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3040", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"14779", + "size":"145042", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"70574", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"52405", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"6648", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"1942572" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"30302", + "size":"338883", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"144404", + "width":"200" + }, + "preview_gif":{ + "height":"144", + "size":"48120", + "url":"https://media0.giphy.com/media/kyzzHEoaLAAr9nX4fy/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"144" + }, + "480w_still":{ + "url":"https://media3.giphy.com/media/kyzzHEoaLAAr9nX4fy/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"UVqhzNsYWIelUBV7zN", + "url":"https://giphy.com/stickers/Emoji-emoji-covid-covid-19-UVqhzNsYWIelUBV7zN", + "slug":"Emoji-emoji-covid-covid-19-UVqhzNsYWIelUBV7zN", + "bitly_gif_url":"https://gph.is/st/m72wRvY", + "bitly_url":"https://gph.is/st/m72wRvY", + "embed_url":"https://giphy.com/embed/UVqhzNsYWIelUBV7zN", + "username":"Emoji", + "source":"", + "title":"Wink Flirt Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-04-15 21:41:01", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"452764", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1685196", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3034", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"49", + "hash":"ca2b12134976d9a31423cb60f4535b76", + "height":"480", + "mp4":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"60356", + "size":"1685196", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"322250", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"40235", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"27230", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1685196", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"6546", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1685196", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1685196", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"200", + "size":"49580", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"200" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"60356", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"11088", + "size":"143562", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"55322", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"21669", + "size":"310294", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"141518", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"179238", + "width":"480" + }, + "preview":{ + "height":"252", + "mp4":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"13484", + "width":"252" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"40235", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"27230", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3034", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"11088", + "size":"143562", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"55322", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"53101", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"6546", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"1364091" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"21669", + "size":"310294", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"141518", + "width":"200" + }, + "preview_gif":{ + "height":"145", + "size":"49384", + "url":"https://media2.giphy.com/media/UVqhzNsYWIelUBV7zN/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"145" + }, + "480w_still":{ + "url":"https://media4.giphy.com/media/UVqhzNsYWIelUBV7zN/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"UsLzFcO1wZCgnAFFvi", + "url":"https://giphy.com/stickers/Emoji-emoji-covid-covid-19-UsLzFcO1wZCgnAFFvi", + "slug":"Emoji-emoji-covid-covid-19-UsLzFcO1wZCgnAFFvi", + "bitly_gif_url":"https://gph.is/st/mg383zm", + "bitly_url":"https://gph.is/st/mg383zm", + "embed_url":"https://giphy.com/embed/UsLzFcO1wZCgnAFFvi", + "username":"Emoji", + "source":"", + "title":"In Love Hearts Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-04-15 22:00:30", + "trending_datetime":"2020-04-21 22:15:10", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"874541", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1880086", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"2997", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"48", + "hash":"a8d0ff331b4fffd6f536c38e09725fc0", + "height":"480", + "mp4":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"109874", + "size":"1880086", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"386504", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"53044", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"30178", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1880086", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"6628", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1880086", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1880086", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"192", + "size":"49102", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"192" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"109874", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"16098", + "size":"149332", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"67908", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"35610", + "size":"383864", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"145438", + "width":"200" + }, + "downsized_small":{ + "height":"400", + "mp4":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"46560", + "width":"400" + }, + "preview":{ + "height":"200", + "mp4":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"16402", + "width":"200" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"53044", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"30178", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"2997", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"16098", + "size":"149332", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"67908", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"44432", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"6628", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"2212155" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"35610", + "size":"383864", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"145438", + "width":"200" + }, + "preview_gif":{ + "height":"150", + "size":"48008", + "url":"https://media1.giphy.com/media/UsLzFcO1wZCgnAFFvi/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"150" + }, + "480w_still":{ + "url":"https://media3.giphy.com/media/UsLzFcO1wZCgnAFFvi/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"cNqBzFAC3aU2gDuD4k", + "url":"https://giphy.com/stickers/Emoji-emoji-covid-covid-19-cNqBzFAC3aU2gDuD4k", + "slug":"Emoji-emoji-covid-covid-19-cNqBzFAC3aU2gDuD4k", + "bitly_gif_url":"https://gph.is/st/E12LPaM", + "bitly_url":"https://gph.is/st/E12LPaM", + "embed_url":"https://giphy.com/embed/cNqBzFAC3aU2gDuD4k", + "username":"Emoji", + "source":"", + "title":"Mask Sweating Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-04-15 21:41:45", + "trending_datetime":"2020-06-30 01:15:04", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"421725", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"894484", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3056", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"25", + "hash":"590ec285f0930531650dd06e228fe9e5", + "height":"480", + "mp4":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"60912", + "size":"894484", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"183132", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"47147", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"28230", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"894484", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"6581", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"894484", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"894484", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"192", + "size":"49818", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"192" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"60912", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"9853", + "size":"75802", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"37544", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"19927", + "size":"180254", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"76002", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"136012", + "width":"480" + }, + "preview":{ + "height":"290", + "mp4":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"15050", + "width":"290" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"47147", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"28230", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3056", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"9853", + "size":"75802", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"37544", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"52994", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"6581", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"1992710" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"19927", + "size":"180254", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"76002", + "width":"200" + }, + "preview_gif":{ + "height":"144", + "size":"48514", + "url":"https://media0.giphy.com/media/cNqBzFAC3aU2gDuD4k/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"144" + }, + "480w_still":{ + "url":"https://media2.giphy.com/media/cNqBzFAC3aU2gDuD4k/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"TF11M0XrowTQWfAgUB", + "url":"https://giphy.com/stickers/Emoji-love-emoji-hearts-TF11M0XrowTQWfAgUB", + "slug":"Emoji-love-emoji-hearts-TF11M0XrowTQWfAgUB", + "bitly_gif_url":"https://gph.is/st/mg38ROm", + "bitly_url":"https://gph.is/st/mg38ROm", + "embed_url":"https://giphy.com/embed/TF11M0XrowTQWfAgUB", + "username":"Emoji", + "source":"", + "title":"Mask Love Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-04-16 00:02:37", + "trending_datetime":"2020-08-10 22:45:07", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"523757", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1135192", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3597", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"25", + "hash":"29021dc3b4cdd8f6293120585721abae", + "height":"480", + "mp4":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"69228", + "size":"1135192", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"251156", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"52688", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"34336", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1135192", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"9211", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1135192", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1135192", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"154", + "size":"49204", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"154" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"69228", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"11009", + "size":"87745", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"47070", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"23702", + "size":"223144", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"95670", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"189711", + "width":"480" + }, + "preview":{ + "height":"246", + "mp4":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"13796", + "width":"246" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"52688", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"34336", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3597", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"11009", + "size":"87745", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"47070", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"59610", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"9211", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"2807751" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"23702", + "size":"223144", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"95670", + "width":"200" + }, + "preview_gif":{ + "height":"131", + "size":"48464", + "url":"https://media1.giphy.com/media/TF11M0XrowTQWfAgUB/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"131" + }, + "480w_still":{ + "url":"https://media4.giphy.com/media/TF11M0XrowTQWfAgUB/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"ftklTmdD9MN3uXaLvb", + "url":"https://giphy.com/stickers/Emoji-emoji-wash-hand-washing-ftklTmdD9MN3uXaLvb", + "slug":"Emoji-emoji-wash-hand-washing-ftklTmdD9MN3uXaLvb", + "bitly_gif_url":"https://gph.is/st/mgbRbzY", + "bitly_url":"https://gph.is/st/mgbRbzY", + "embed_url":"https://giphy.com/embed/ftklTmdD9MN3uXaLvb", + "username":"Emoji", + "source":"", + "title":"Wash Hands Corona Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2020-03-20 21:57:28", + "trending_datetime":"2020-08-27 07:45:05", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"1123950", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"843125", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3120", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"24", + "hash":"a43540aa47a915a343dca733b3c7bb96", + "height":"480", + "mp4":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"90262", + "size":"843125", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"176816", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"40008", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"30126", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"843125", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"7120", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"843125", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"843125", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"168", + "size":"49192", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"168" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"90262", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"15312", + "size":"73362", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"39156", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"31329", + "size":"168274", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"81070", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"134167", + "width":"480" + }, + "preview":{ + "height":"292", + "mp4":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"22209", + "width":"292" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"40008", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"30126", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3120", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"15312", + "size":"73362", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"39156", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"50160", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"7120", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"2055045" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"31329", + "size":"168274", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"81070", + "width":"200" + }, + "preview_gif":{ + "height":"142", + "size":"48741", + "url":"https://media0.giphy.com/media/ftklTmdD9MN3uXaLvb/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"142" + }, + "480w_still":{ + "url":"https://media2.giphy.com/media/ftklTmdD9MN3uXaLvb/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"hVlZnRT6QW1DeYj6We", + "url":"https://giphy.com/stickers/hVlZnRT6QW1DeYj6We", + "slug":"hVlZnRT6QW1DeYj6We", + "bitly_gif_url":"https://gph.is/st/E1jqxzM", + "bitly_url":"https://gph.is/st/E1jqxzM", + "embed_url":"https://giphy.com/embed/hVlZnRT6QW1DeYj6We", + "username":"Emoji", + "source":"https://giphy.com/apps", + "title":"Joy Laughing Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"giphy.com", + "source_post_url":"https://giphy.com/apps", + "is_sticker":1, + "import_datetime":"2019-05-21 22:15:00", + "trending_datetime":"2020-05-19 09:30:08", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"1042553", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"994053", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3358", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"24", + "hash":"8b362821e077380c3e45f006f48bf741", + "height":"480", + "mp4":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"90973", + "size":"994053", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"220380", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"52933", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"34174", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"994053", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"7708", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"994053", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"994053", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"160", + "size":"49516", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"160" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"90973", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"14887", + "size":"79349", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"42012", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"30396", + "size":"213316", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"85832", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"175686", + "width":"480" + }, + "preview":{ + "height":"256", + "mp4":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"18602", + "width":"256" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"52933", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"34174", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3358", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"14887", + "size":"79349", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"42012", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"61720", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"7708", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"2706768" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"30396", + "size":"213316", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"85832", + "width":"200" + }, + "preview_gif":{ + "height":"138", + "size":"48527", + "url":"https://media2.giphy.com/media/hVlZnRT6QW1DeYj6We/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"138" + }, + "480w_still":{ + "url":"https://media3.giphy.com/media/hVlZnRT6QW1DeYj6We/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"YondZW6AMjgTEHevF0", + "url":"https://giphy.com/stickers/YondZW6AMjgTEHevF0", + "slug":"YondZW6AMjgTEHevF0", + "bitly_gif_url":"https://gph.is/st/MlL59LM", + "bitly_url":"https://gph.is/st/MlL59LM", + "embed_url":"https://giphy.com/embed/YondZW6AMjgTEHevF0", + "username":"Emoji", + "source":"https://giphy.com/apps", + "title":"Heart Love Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"giphy.com", + "source_post_url":"https://giphy.com/apps", + "is_sticker":1, + "import_datetime":"2019-05-21 22:14:47", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"209491", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"486366", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"2259", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"24", + "hash":"bdf6f3a1d20e40ddea6c51a3af40b36e", + "height":"480", + "mp4":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"32080", + "size":"486366", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"96996", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"25009", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"20988", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"486366", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"4337", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"486366", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"486366", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"196", + "size":"49448", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"196" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"32080", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"7285", + "size":"55063", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"28062", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"12975", + "size":"111430", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"56314", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"49080", + "width":"480" + }, + "preview":{ + "height":"480", + "mp4":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"49080", + "width":"480" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"25009", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"20988", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"2259", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"7285", + "size":"55063", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"28062", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"31943", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"4337", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"749808" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"12975", + "size":"111430", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"56314", + "width":"200" + }, + "preview_gif":{ + "height":"168", + "size":"48670", + "url":"https://media4.giphy.com/media/YondZW6AMjgTEHevF0/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"168" + }, + "480w_still":{ + "url":"https://media0.giphy.com/media/YondZW6AMjgTEHevF0/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"lRXY41yFFi9RfNXyPN", + "url":"https://giphy.com/stickers/lRXY41yFFi9RfNXyPN", + "slug":"lRXY41yFFi9RfNXyPN", + "bitly_gif_url":"https://gph.is/st/MBnDodM", + "bitly_url":"https://gph.is/st/MBnDodM", + "embed_url":"https://giphy.com/embed/lRXY41yFFi9RfNXyPN", + "username":"Emoji", + "source":"", + "title":"In Love Hearts Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2019-05-21 22:14:38", + "trending_datetime":"2020-08-08 02:30:02", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"1432053", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1892825", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3015", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"48", + "hash":"457dc257bc755c151547501e6cd4710f", + "height":"480", + "mp4":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"104770", + "size":"1892825", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"394540", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"56264", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"29306", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1892825", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"6695", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1892825", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1892825", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"192", + "size":"49358", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"192" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"104770", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"15201", + "size":"149119", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"64136", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"31825", + "size":"383447", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"138544", + "width":"200" + }, + "downsized_small":{ + "height":"402", + "mp4":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"39572", + "width":"402" + }, + "preview":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"14676", + "width":"200" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"56264", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"29306", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3015", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"15201", + "size":"149119", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"64136", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"44639", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"6695", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"2197442" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"31825", + "size":"383447", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"138544", + "width":"200" + }, + "preview_gif":{ + "height":"148", + "size":"49916", + "url":"https://media2.giphy.com/media/lRXY41yFFi9RfNXyPN/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"148" + }, + "480w_still":{ + "url":"https://media1.giphy.com/media/lRXY41yFFi9RfNXyPN/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"J2awouDsf23R2vo2p5", + "url":"https://giphy.com/stickers/J2awouDsf23R2vo2p5", + "slug":"J2awouDsf23R2vo2p5", + "bitly_gif_url":"https://gph.is/st/YKoBe5Y", + "bitly_url":"https://gph.is/st/YKoBe5Y", + "embed_url":"https://giphy.com/embed/J2awouDsf23R2vo2p5", + "username":"Emoji", + "source":"https://giphy.com/apps", + "title":"Fire Emoji Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"giphy.com", + "source_post_url":"https://giphy.com/apps", + "is_sticker":1, + "import_datetime":"2019-05-21 22:14:17", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"463382", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1122375", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"2160", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"72", + "hash":"d5d24e4eda5ef019ec5274c8a4603dcc", + "height":"480", + "mp4":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"127713", + "size":"1122375", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"208260", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"20777", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"13114", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1122375", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"4235", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1122375", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1122375", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"480", + "size":"49242", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"480" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"127713", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"22468", + "size":"142407", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"70398", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"46763", + "size":"278517", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"143512", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"131381", + "width":"480" + }, + "preview":{ + "height":"480", + "mp4":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"40974", + "width":"480" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"20777", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"13114", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"2160", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"22468", + "size":"142407", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"70398", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"22832", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"4235", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"684817" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"46763", + "size":"278517", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"143512", + "width":"200" + }, + "preview_gif":{ + "height":"212", + "size":"48235", + "url":"https://media3.giphy.com/media/J2awouDsf23R2vo2p5/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"212" + }, + "480w_still":{ + "url":"https://media2.giphy.com/media/J2awouDsf23R2vo2p5/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"IzcFv6WJ4310bDeGjo", + "url":"https://giphy.com/stickers/IzcFv6WJ4310bDeGjo", + "slug":"IzcFv6WJ4310bDeGjo", + "bitly_gif_url":"https://gph.is/st/Mx1Rd9Y", + "bitly_url":"https://gph.is/st/Mx1Rd9Y", + "embed_url":"https://giphy.com/embed/IzcFv6WJ4310bDeGjo", + "username":"Emoji", + "source":"", + "title":"Sad Tears Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2019-05-21 22:13:48", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"427972", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"834867", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3006", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"24", + "hash":"4c6c693465e89a914c40ba485cc721b4", + "height":"480", + "mp4":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"44470", + "size":"834867", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"160828", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"39388", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"28600", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"834867", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"6415", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"834867", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"834867", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"194", + "size":"49248", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"194" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"44470", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"8459", + "size":"70819", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"35228", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"15307", + "size":"153475", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"70540", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"106753", + "width":"480" + }, + "preview":{ + "height":"328", + "mp4":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"13284", + "width":"328" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"39388", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"28600", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3006", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"8459", + "size":"70819", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"35228", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"55048", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"6415", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"1653375" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"15307", + "size":"153475", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"70540", + "width":"200" + }, + "preview_gif":{ + "height":"141", + "size":"49927", + "url":"https://media4.giphy.com/media/IzcFv6WJ4310bDeGjo/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"141" + }, + "480w_still":{ + "url":"https://media1.giphy.com/media/IzcFv6WJ4310bDeGjo/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"iD6QiXTTAYrU5C3c89", + "url":"https://giphy.com/stickers/iD6QiXTTAYrU5C3c89", + "slug":"iD6QiXTTAYrU5C3c89", + "bitly_gif_url":"https://gph.is/st/Yzr7dWY", + "bitly_url":"https://gph.is/st/Yzr7dWY", + "embed_url":"https://giphy.com/embed/iD6QiXTTAYrU5C3c89", + "username":"Emoji", + "source":"", + "title":"No No No Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2019-05-21 22:13:38", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"319463", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"612049", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"2532", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"24", + "hash":"b1033bc996c69d3a6003c2fa07281aaf", + "height":"480", + "mp4":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"49035", + "size":"612049", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"108592", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"29496", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"19414", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"612049", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"5326", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"612049", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"612049", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"242", + "size":"49436", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"242" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"49035", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"9418", + "size":"58114", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"27762", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"18629", + "size":"122953", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"55440", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"72379", + "width":"480" + }, + "preview":{ + "height":"398", + "mp4":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"19847", + "width":"398" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"29496", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"19414", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"2532", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"9418", + "size":"58114", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"27762", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"36133", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"5326", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"1122881" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"18629", + "size":"122953", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"55440", + "width":"200" + }, + "preview_gif":{ + "height":"170", + "size":"49876", + "url":"https://media4.giphy.com/media/iD6QiXTTAYrU5C3c89/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"170" + }, + "480w_still":{ + "url":"https://media0.giphy.com/media/iD6QiXTTAYrU5C3c89/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"USUIWSteF8DJoc5Snd", + "url":"https://giphy.com/stickers/USUIWSteF8DJoc5Snd", + "slug":"USUIWSteF8DJoc5Snd", + "bitly_gif_url":"https://gph.is/st/mea5pZm", + "bitly_url":"https://gph.is/st/mea5pZm", + "embed_url":"https://giphy.com/embed/USUIWSteF8DJoc5Snd", + "username":"Emoji", + "source":"", + "title":"Thinking Think Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2019-05-21 22:13:28", + "trending_datetime":"2020-08-06 18:00:02", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"972074", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"2310740", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3152", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"60", + "hash":"90c6698dc6f9e00bb32ffb3e21042474", + "height":"480", + "mp4":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"100297", + "size":"2310740", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"434760", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"40778", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"28856", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"21084", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy-downsized_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"7252", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"2310740", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1206917", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy-downsized.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized.gif", + "width":"480" + }, + "preview_webp":{ + "height":"192", + "size":"49176", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"192" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"100297", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"16998", + "size":"182211", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"89794", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"34259", + "size":"404057", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"181602", + "width":"200" + }, + "downsized_small":{ + "height":"404", + "mp4":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"40948", + "width":"404" + }, + "preview":{ + "height":"384", + "mp4":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"24512", + "width":"384" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"40778", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"28856", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3152", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"16998", + "size":"182211", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"89794", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"60103", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"7252", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"1759926" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"34259", + "size":"404057", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"181602", + "width":"200" + }, + "preview_gif":{ + "height":"132", + "size":"48468", + "url":"https://media1.giphy.com/media/USUIWSteF8DJoc5Snd/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"132" + }, + "480w_still":{ + "url":"https://media3.giphy.com/media/USUIWSteF8DJoc5Snd/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"ehz3LfVj7NvpY8jYUY", + "url":"https://giphy.com/stickers/ehz3LfVj7NvpY8jYUY", + "slug":"ehz3LfVj7NvpY8jYUY", + "bitly_gif_url":"https://gph.is/st/Yrd5a1E", + "bitly_url":"https://gph.is/st/Yrd5a1E", + "embed_url":"https://giphy.com/embed/ehz3LfVj7NvpY8jYUY", + "username":"Emoji", + "source":"https://giphy.com/apps", + "title":"Animated Emoji Thumbs Up Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"giphy.com", + "source_post_url":"https://giphy.com/apps", + "is_sticker":1, + "import_datetime":"2019-05-21 22:13:02", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"472614", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1432314", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"2710", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"48", + "hash":"f7262b8c99b1d74a8cedfe1dc727ed87", + "height":"480", + "mp4":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"64528", + "size":"1432314", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"237982", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"32188", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"21638", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1432314", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"5753", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1432314", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1432314", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"224", + "size":"49362", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"224" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"64528", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"13225", + "size":"124830", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"62184", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"26959", + "size":"264899", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"124848", + "width":"200" + }, + "downsized_small":{ + "height":"480", + "mp4":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"115707", + "width":"480" + }, + "preview":{ + "height":"314", + "mp4":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"19652", + "width":"314" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"32188", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"21638", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"2710", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"13225", + "size":"124830", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"62184", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"46678", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"5753", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"908086" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"26959", + "size":"264899", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"124848", + "width":"200" + }, + "preview_gif":{ + "height":"153", + "size":"48789", + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"153" + }, + "480w_still":{ + "url":"https://media2.giphy.com/media/ehz3LfVj7NvpY8jYUY/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"hp3dmEypS0FaoyzWLR", + "url":"https://giphy.com/stickers/hp3dmEypS0FaoyzWLR", + "slug":"hp3dmEypS0FaoyzWLR", + "bitly_gif_url":"https://gph.is/st/YvP5dzE", + "bitly_url":"https://gph.is/st/YvP5dzE", + "embed_url":"https://giphy.com/embed/hp3dmEypS0FaoyzWLR", + "username":"Emoji", + "source":"", + "title":"Animated Emoji Omg Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2019-05-21 22:12:44", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"2425594", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"2222209", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3834", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"48", + "hash":"d7d429894225f32b0d693827225a0cdc", + "height":"480", + "mp4":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"245018", + "size":"2222209", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"532382", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"69149", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"39592", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"26915", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy-downsized_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"10130", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"2222209", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1269632", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy-downsized.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized.gif", + "width":"480" + }, + "preview_webp":{ + "height":"130", + "size":"48604", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"130" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"245018", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"31760", + "size":"181788", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"104902", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"75328", + "size":"546861", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"219686", + "width":"200" + }, + "downsized_small":{ + "height":"314", + "mp4":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"74521", + "width":"314" + }, + "preview":{ + "height":"192", + "mp4":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"31782", + "width":"192" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"69149", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"39592", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3834", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"31760", + "size":"181788", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"104902", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"62861", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"10130", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"3586965" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"75328", + "size":"546861", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"219686", + "width":"200" + }, + "preview_gif":{ + "height":"123", + "size":"48881", + "url":"https://media0.giphy.com/media/hp3dmEypS0FaoyzWLR/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"123" + }, + "480w_still":{ + "url":"https://media2.giphy.com/media/hp3dmEypS0FaoyzWLR/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"Wm8h2gyEY8VnJeru6f", + "url":"https://giphy.com/stickers/Wm8h2gyEY8VnJeru6f", + "slug":"Wm8h2gyEY8VnJeru6f", + "bitly_gif_url":"https://gph.is/st/Yn4k5gE", + "bitly_url":"https://gph.is/st/Yn4k5gE", + "embed_url":"https://giphy.com/embed/Wm8h2gyEY8VnJeru6f", + "username":"Emoji", + "source":"https://giphy.com/apps", + "title":"Animated Emoji Chefs Kiss Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"giphy.com", + "source_post_url":"https://giphy.com/apps", + "is_sticker":1, + "import_datetime":"2019-05-21 22:11:59", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"2805960", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"2656622", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"4337", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"48", + "hash":"ddda21c77dd758aa14c8b395d8dcbfa3", + "height":"480", + "mp4":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"203682", + "size":"2656622", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"623906", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"77580", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"46652", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"31583", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy-downsized_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"11551", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"2656622", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1518904", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy-downsized.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized.gif", + "width":"480" + }, + "preview_webp":{ + "height":"122", + "size":"49634", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"122" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"203682", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"28904", + "size":"207171", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"113864", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"65089", + "size":"621136", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"248274", + "width":"200" + }, + "downsized_small":{ + "height":"300", + "mp4":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"57230", + "width":"300" + }, + "preview":{ + "height":"192", + "mp4":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"28421", + "width":"192" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"77580", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"46652", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"4337", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"28904", + "size":"207171", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"113864", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"72563", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"11551", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"3935178" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"65089", + "size":"621136", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"248274", + "width":"200" + }, + "preview_gif":{ + "height":"113", + "size":"49318", + "url":"https://media0.giphy.com/media/Wm8h2gyEY8VnJeru6f/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"113" + }, + "480w_still":{ + "url":"https://media1.giphy.com/media/Wm8h2gyEY8VnJeru6f/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"Q6xFPLfzfsgKoKDV60", + "url":"https://giphy.com/stickers/Q6xFPLfzfsgKoKDV60", + "slug":"Q6xFPLfzfsgKoKDV60", + "bitly_gif_url":"https://gph.is/st/m8ZPe9M", + "bitly_url":"https://gph.is/st/m8ZPe9M", + "embed_url":"https://giphy.com/embed/Q6xFPLfzfsgKoKDV60", + "username":"Emoji", + "source":"", + "title":"Animated Emoji Whatever Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2019-05-21 22:11:29", + "trending_datetime":"2020-07-24 08:00:06", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"1234778", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1833197", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3102", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"48", + "hash":"18c16a4e113fc4bcd35b1aaf1c1b2bcd", + "height":"480", + "mp4":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"130561", + "size":"1833197", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"410254", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"44318", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"31624", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1833197", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"7686", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1833197", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1833197", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"156", + "size":"48976", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"156" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"130561", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"19737", + "size":"149002", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"91594", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"43441", + "size":"348471", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"195928", + "width":"200" + }, + "downsized_small":{ + "height":"398", + "mp4":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"55760", + "width":"398" + }, + "preview":{ + "height":"198", + "mp4":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"19682", + "width":"198" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"44318", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"31624", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3102", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"19737", + "size":"149002", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"91594", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"48781", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"7686", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"2260387" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"43441", + "size":"348471", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"195928", + "width":"200" + }, + "preview_gif":{ + "height":"152", + "size":"48009", + "url":"https://media3.giphy.com/media/Q6xFPLfzfsgKoKDV60/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"152" + }, + "480w_still":{ + "url":"https://media4.giphy.com/media/Q6xFPLfzfsgKoKDV60/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"LOnt6uqjD9OexmQJRB", + "url":"https://giphy.com/stickers/LOnt6uqjD9OexmQJRB", + "slug":"LOnt6uqjD9OexmQJRB", + "bitly_gif_url":"https://gph.is/st/YjQd4OM", + "bitly_url":"https://gph.is/st/YjQd4OM", + "embed_url":"https://giphy.com/embed/LOnt6uqjD9OexmQJRB", + "username":"Emoji", + "source":"", + "title":"Look Looking Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2019-05-21 22:11:08", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"985712", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1974375", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3134", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"60", + "hash":"a71c1120763e9b9690461cee3f3218c6", + "height":"480", + "mp4":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"114586", + "size":"1974375", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"461854", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"39967", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"30018", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1974375", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"7014", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1974375", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1974375", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"188", + "size":"49762", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"188" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"114586", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"13789", + "size":"179755", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"84920", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"29555", + "size":"404196", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"190066", + "width":"200" + }, + "downsized_small":{ + "height":"426", + "mp4":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"43166", + "width":"426" + }, + "preview":{ + "height":"384", + "mp4":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"25832", + "width":"384" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"39967", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"30018", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3134", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"13789", + "size":"179755", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"84920", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"49241", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"7014", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"1568984" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"29555", + "size":"404196", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"190066", + "width":"200" + }, + "preview_gif":{ + "height":"143", + "size":"46581", + "url":"https://media3.giphy.com/media/LOnt6uqjD9OexmQJRB/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"143" + }, + "480w_still":{ + "url":"https://media0.giphy.com/media/LOnt6uqjD9OexmQJRB/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + }, + { + "type":"gif", + "id":"S3nZ8V9uemShxiWX8g", + "url":"https://giphy.com/stickers/S3nZ8V9uemShxiWX8g", + "slug":"S3nZ8V9uemShxiWX8g", + "bitly_gif_url":"https://gph.is/st/E3Rgexm", + "bitly_url":"https://gph.is/st/E3Rgexm", + "embed_url":"https://giphy.com/embed/S3nZ8V9uemShxiWX8g", + "username":"Emoji", + "source":"", + "title":"Party Celebrate Sticker by Emoji", + "rating":"g", + "content_url":"", + "source_tld":"", + "source_post_url":"", + "is_sticker":1, + "import_datetime":"2019-05-21 22:10:42", + "trending_datetime":"0000-00-00 00:00:00", + "images":{ + "hd":{ + "height":"1024", + "mp4":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy-hd.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-hd.mp4", + "mp4_size":"1035465", + "width":"1024" + }, + "downsized_large":{ + "height":"480", + "size":"1486725", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "fixed_height_small_still":{ + "height":"100", + "size":"3124", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/100_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100_s.gif", + "width":"100" + }, + "original":{ + "frames":"48", + "hash":"d3c68aeb6f9ead3e57f80f12d12304b8", + "height":"480", + "mp4":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"190459", + "size":"1486725", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "webp":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.webp", + "webp_size":"466042", + "width":"480" + }, + "fixed_height_downsampled":{ + "height":"200", + "size":"38111", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.gif", + "webp":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_d.webp", + "webp_size":"33106", + "width":"200" + }, + "downsized_still":{ + "height":"480", + "size":"1486725", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_height_still":{ + "height":"200", + "size":"7024", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200_s.gif", + "width":"200" + }, + "downsized_medium":{ + "height":"480", + "size":"1486725", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "downsized":{ + "height":"480", + "size":"1486725", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.gif", + "width":"480" + }, + "preview_webp":{ + "height":"114", + "size":"49978", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy-preview.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.webp", + "width":"114" + }, + "original_mp4":{ + "height":"480", + "mp4":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy.mp4", + "mp4_size":"190459", + "width":"480" + }, + "fixed_height_small":{ + "height":"100", + "mp4":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/100.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.mp4", + "mp4_size":"30572", + "size":"142671", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/100.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.gif", + "webp":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/100.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100.webp", + "webp_size":"122442", + "width":"100" + }, + "fixed_height":{ + "height":"200", + "mp4":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.mp4", + "mp4_size":"70995", + "size":"312126", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.gif", + "webp":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200.webp", + "webp_size":"273200", + "width":"200" + }, + "downsized_small":{ + "height":"390", + "mp4":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy-downsized-small.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-downsized-small.mp4", + "mp4_size":"79664", + "width":"390" + }, + "preview":{ + "height":"194", + "mp4":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy-preview.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.mp4", + "mp4_size":"31882", + "width":"194" + }, + "fixed_width_downsampled":{ + "height":"200", + "size":"38111", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200w_d.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.gif", + "webp":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200w_d.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_d.webp", + "webp_size":"33106", + "width":"200" + }, + "fixed_width_small_still":{ + "height":"100", + "size":"3124", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/100w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w_s.gif", + "width":"100" + }, + "fixed_width_small":{ + "height":"100", + "mp4":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/100w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.mp4", + "mp4_size":"30572", + "size":"142671", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/100w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.gif", + "webp":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/100w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=100w.webp", + "webp_size":"122442", + "width":"100" + }, + "original_still":{ + "height":"480", + "size":"39874", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy_s.gif", + "width":"480" + }, + "fixed_width_still":{ + "height":"200", + "size":"7024", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200w_s.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w_s.gif", + "width":"200" + }, + "looping":{ + "mp4":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy-loop.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-loop.mp4", + "mp4_size":"2301423" + }, + "fixed_width":{ + "height":"200", + "mp4":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200w.mp4?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.mp4", + "mp4_size":"70995", + "size":"312126", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200w.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.gif", + "webp":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/200w.webp?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=200w.webp", + "webp_size":"273200", + "width":"200" + }, + "preview_gif":{ + "height":"159", + "size":"48325", + "url":"https://media3.giphy.com/media/S3nZ8V9uemShxiWX8g/giphy-preview.gif?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=giphy-preview.gif", + "width":"159" + }, + "480w_still":{ + "url":"https://media0.giphy.com/media/S3nZ8V9uemShxiWX8g/480w_s.jpg?cid=c0109c7ac66d7b4e14715265fb389281879da6b4d110605f&rid=480w_s.jpg", + "width":"480", + "height":"480" + } + }, + "user":{ + "avatar_url":"https://media4.giphy.com/avatars/Emoji/Qz0OV7ErAj7L.gif", + "banner_image":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "banner_url":"https://media4.giphy.com/headers/Emoji/WgR1GE53eeo7.gif", + "profile_url":"https://giphy.com/Emoji/", + "username":"Emoji", + "display_name":"", + "is_verified":true + } + } + ], + "pagination":{ + "total_count":93, + "count":25, + "offset":0 + }, + "meta":{ + "status":200, + "msg":"OK", + "response_id":"c66d7b4e14715265fb389281879da6b4d110605f" + } +} + + + '''; diff --git a/test/data/random.dart b/test/data/random.dart new file mode 100644 index 0000000..14ad110 --- /dev/null +++ b/test/data/random.dart @@ -0,0 +1,218 @@ +const randomBody = '''{ + "data": { + "type": "gif", + "id": "l378fBdMK6KSJEkGQ", + "slug": "bbc-bbc2-l378fBdMK6KSJEkGQ", + "url": "https://giphy.com/gifs/bbc-bbc2-l378fBdMK6KSJEkGQ", + "bitly_gif_url": "http://gph.is/2eD63vJ", + "bitly_url": "http://gph.is/2eD63vJ", + "embed_url": "https://giphy.com/embed/l378fBdMK6KSJEkGQ", + "username": "bbc", + "source": "", + "content_url": "", + "source_tld": "", + "source_post_url": "", + "is_sticker": 0, + "import_datetime": "2017-09-04 13:21:17", + "trending_datetime": "0000-00-00 00:00:00", + "user": { + "avatar_url": "https://media.giphy.com/channel_assets/bbc/w9R06mXBId4p.jpg", + "banner_url": "", + "profile_url": "https://giphy.com/bbc/", + "username": "bbc", + "display_name": "BBC", + "twitter": "bbc", + "is_verified": true + }, + "images": { + "fixed_height_still": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200_s.gif", + "width": "356", + "height": "200", + "size": "38336" + }, + "original_still": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy_s.gif", + "width": "500", + "height": "281", + "size": "75542" + }, + "fixed_width": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200w.gif", + "width": "200", + "height": "112", + "size": "562276", + "mp4": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200w.mp4", + "mp4_size": "84922", + "webp": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200w.webp", + "webp_size": "263926" + }, + "fixed_height_small_still": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100_s.gif", + "width": "178", + "height": "100", + "size": "12245" + }, + "fixed_height_downsampled": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200_d.gif", + "width": "356", + "height": "200", + "size": "228747", + "webp": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200_d.webp", + "webp_size": "68534" + }, + "preview": { + "width": "307", + "height": "172", + "mp4": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy-preview.mp4", + "mp4_size": "35706" + }, + "fixed_height_small": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100.gif", + "width": "178", + "height": "100", + "size": "496113", + "mp4": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100.mp4", + "mp4_size": "75620", + "webp": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100.webp", + "webp_size": "236780" + }, + "downsized_still": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy-downsized_s.gif", + "width": "250", + "height": "140", + "size": "20078" + }, + "downsized": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy-downsized.gif", + "width": "250", + "height": "140", + "size": "870239" + }, + "downsized_large": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy.gif", + "width": "500", + "height": "281", + "size": "3864393" + }, + "fixed_width_small_still": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100w_s.gif", + "width": "100", + "height": "56", + "size": "5798" + }, + "preview_webp": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy-preview.webp", + "width": "198", + "height": "111", + "size": "47702" + }, + "fixed_width_still": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200w_s.gif", + "width": "200", + "height": "112", + "size": "14008" + }, + "fixed_width_small": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100w.gif", + "width": "100", + "height": "56", + "size": "166043", + "mp4": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100w.mp4", + "mp4_size": "33425", + "webp": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100w.webp", + "webp_size": "108828" + }, + "downsized_small": { + "width": "310", + "height": "174", + "mp4": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy-downsized-small.mp4", + "mp4_size": "97436" + }, + "fixed_width_downsampled": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200w_d.gif", + "width": "200", + "height": "112", + "size": "76875", + "webp": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200w_d.webp", + "webp_size": "29612" + }, + "downsized_medium": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy.gif", + "width": "500", + "height": "281", + "size": "3864393" + }, + "original": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy.gif", + "width": "500", + "height": "281", + "size": "3864393", + "frames": "54", + "mp4": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy.mp4", + "mp4_size": "349705", + "webp": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy.webp", + "webp_size": "1093592", + "hash": "e05f03e310ff6313ea3d6920b876f0da" + }, + "fixed_height": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200.gif", + "width": "356", + "height": "200", + "size": "1850186", + "mp4": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200.mp4", + "mp4_size": "204689", + "webp": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200.webp", + "webp_size": "610768" + }, + "looping": { + "mp4": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy-loop.mp4", + "mp4_size": "1597501" + }, + "original_mp4": { + "width": "480", + "height": "268", + "mp4": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy.mp4", + "mp4_size": "349705" + }, + "preview_gif": { + "url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy-preview.gif", + "width": "141", + "height": "79", + "size": "49015" + }, + "480w_still": { + "url": "l378fBdMK6KSJEkGQ/480w_s.jpg", + "width": "480", + "height": "270" + } + }, + "title": "drunk bbc two GIF by BBC", + "image_original_url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy.gif", + "image_url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy.gif", + "image_mp4_url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/giphy.mp4", + "image_frames": "54", + "image_width": "500", + "image_height": "281", + "fixed_height_downsampled_url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200_d.gif", + "fixed_height_downsampled_width": "356", + "fixed_height_downsampled_height": "200", + "fixed_width_downsampled_url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/200w_d.gif", + "fixed_width_downsampled_width": "200", + "fixed_width_downsampled_height": "112", + "fixed_height_small_url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100.gif", + "fixed_height_small_still_url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100_s.gif", + "fixed_height_small_width": "178", + "fixed_height_small_height": "100", + "fixed_width_small_url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100w.gif", + "fixed_width_small_still_url": "https://media3.giphy.com/media/l378fBdMK6KSJEkGQ/100w_s.gif", + "fixed_width_small_width": "100", + "fixed_width_small_height": "56", + "caption": "" + }, + "meta": { + "status": 200, + "msg": "OK", + "response_id": "5ae47cbb49664f74631cc3a5" + } +}'''; diff --git a/test/data/search.dart b/test/data/search.dart new file mode 100644 index 0000000..61ba0f4 --- /dev/null +++ b/test/data/search.dart @@ -0,0 +1,190 @@ +const searchBody = '''{ + "data": [ + { + "type": "gif", + "id": "5xaOcLDE64VMF4LqqrK", + "slug": "drake-applause-glasses-5xaOcLDE64VMF4LqqrK", + "url": "https://giphy.com/gifs/drake-applause-glasses-5xaOcLDE64VMF4LqqrK", + "bitly_gif_url": "https://gph.is/1stJEuf", + "bitly_url": "https://gph.is/1stJEuf", + "embed_url": "https://giphy.com/embed/5xaOcLDE64VMF4LqqrK", + "username": "", + "source": "https://giphy.com", + "rating": "g", + "content_url": "", + "source_tld": "giphy.com", + "source_post_url": "https://giphy.com", + "is_sticker": 0, + "import_datetime": "2014-11-11 00:23:07", + "trending_datetime": "2017-03-19 00:29:28", + "images": { + "fixed_height_still": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200_s.gif", + "width": "202", + "height": "200" + }, + "original_still": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy_s.gif", + "width": "325", + "height": "322" + }, + "fixed_width": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200w.gif", + "width": "200", + "height": "198", + "size": "1565437", + "mp4": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200w.mp4", + "mp4_size": "219778", + "webp": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200w.webp", + "webp_size": "951418" + }, + "fixed_height_small_still": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/100_s.gif", + "width": "101", + "height": "100" + }, + "fixed_height_downsampled": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200_d.gif", + "width": "202", + "height": "200", + "size": "138795", + "webp": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200_d.webp", + "webp_size": "80790" + }, + "preview": { + "width": "150", + "height": "148", + "mp4": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy-preview.mp4", + "mp4_size": "44527" + }, + "fixed_height_small": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/100.gif", + "width": "101", + "height": "100", + "size": "479778", + "mp4": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/100.mp4", + "mp4_size": "47448", + "webp": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/100.webp", + "webp_size": "313752" + }, + "downsized_still": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy-downsized_s.gif", + "width": "250", + "height": "247", + "size": "41523" + }, + "downsized": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy-downsized.gif", + "width": "250", + "height": "247", + "size": "1033855" + }, + "downsized_large": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy.gif", + "width": "325", + "height": "322", + "size": "4093990" + }, + "fixed_width_small_still": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/100w_s.gif", + "width": "100", + "height": "99" + }, + "preview_webp": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy-preview.webp", + "width": "110", + "height": "109", + "size": "47490" + }, + "fixed_width_still": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200w_s.gif", + "width": "200", + "height": "198" + }, + "fixed_width_small": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/100w.gif", + "width": "100", + "height": "99", + "size": "472467", + "mp4": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/100w.mp4", + "mp4_size": "47652", + "webp": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/100w.webp", + "webp_size": "310828" + }, + "downsized_small": { + "width": "148", + "height": "148", + "mp4": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy-downsized-small.mp4", + "mp4_size": "190146" + }, + "fixed_width_downsampled": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200w_d.gif", + "width": "200", + "height": "198", + "size": "136191", + "webp": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200w_d.webp", + "webp_size": "80196" + }, + "downsized_medium": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy.gif", + "width": "325", + "height": "322", + "size": "4093990" + }, + "original": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy.gif", + "width": "325", + "height": "322", + "size": "4093990", + "frames": "73", + "mp4": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy.mp4", + "mp4_size": "923106", + "webp": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy.webp", + "webp_size": "2282480" + }, + "fixed_height": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200.gif", + "width": "202", + "height": "200", + "size": "1592173", + "mp4": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200.mp4", + "mp4_size": "217984", + "webp": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/200.webp", + "webp_size": "960740" + }, + "looping": { + "mp4": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy-loop.mp4", + "mp4_size": "2762946" + }, + "original_mp4": { + "width": "480", + "height": "474", + "mp4": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy.mp4", + "mp4_size": "923106" + }, + "preview_gif": { + "url": "https://media1.giphy.com/media/5xaOcLDE64VMF4LqqrK/giphy-preview.gif", + "width": "91", + "height": "90", + "size": "49324" + }, + "480w_still": { + "url": "https://media2.giphy.com/media/5xaOcLDE64VMF4LqqrK/480w_s.jpg", + "width": "480", + "height": "476" + } + }, + "title": "toronto raptors applause GIF" + } + ], + "pagination": { + "total_count": 10049, + "count": 1, + "offset": 0 + }, + "meta": { + "status": 200, + "msg": "OK", + "response_id": "5ae479246763362e59d8b450" + } +}'''; diff --git a/test/data/trending.dart b/test/data/trending.dart new file mode 100644 index 0000000..afa3b3e --- /dev/null +++ b/test/data/trending.dart @@ -0,0 +1,222 @@ +const trendingBody = '''{ + "data": [ + { + "type": "gif", + "id": "l49JIgBhX4X6hyCGY", + "slug": "adweek-water-cary-elwes-l49JIgBhX4X6hyCGY", + "url": "https://giphy.com/gifs/adweek-water-cary-elwes-l49JIgBhX4X6hyCGY", + "bitly_gif_url": "https://gph.is/2EVgGCt", + "bitly_url": "https://gph.is/2EVgGCt", + "embed_url": "https://giphy.com/embed/l49JIgBhX4X6hyCGY", + "username": "adweek", + "source": "", + "rating": "g", + "content_url": "", + "source_tld": "", + "source_post_url": "", + "is_sticker": 0, + "import_datetime": "2018-01-04 18:58:22", + "trending_datetime": "2018-04-27 23:15:01", + "user": { + "avatar_url": "https://media2.giphy.com/avatars/adweek/iLI6u94qEbnR.jpg", + "banner_url": "https://media2.giphy.com/avatars/adweek/UJKiOn3S78hf.gif", + "profile_url": "https://giphy.com/adweek/", + "username": "adweek", + "display_name": "ADWEEK", + "twitter": "@adweek", + "guid": "YWxmcmVkLm1hc2tlcm9uaUBhZHdlZWsuY29t", + "metadata_description": "The best GIFs in advertising.", + "attribution_display_name": "ADWEEK", + "name": "ADWEEK", + "description": "Welcome to Adweek on Giphy. The best advertising GIFs on the internet. Need a GIF from an ad? Hit us up on Twitter.", + "facebook_url": "https://www.facebook.com/Adweek", + "twitter_url": "https://twitter.com/adweek", + "instagram_url": "https://instagram.com/adweek", + "tumblr_url": "https://adweekmag.tumblr.com/", + "suppress_chrome": false, + "website_url": "https://adweek.com/", + "website_display_url": "adweek.com" + }, + "images": { + "fixed_height_still": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200_s.gif", + "width": "356", + "height": "200", + "size": "49350" + }, + "original_still": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy_s.gif", + "width": "480", + "height": "270", + "size": "81453" + }, + "fixed_width": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200w.gif", + "width": "200", + "height": "112", + "size": "303963", + "mp4": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200w.mp4", + "mp4_size": "35425", + "webp": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200w.webp", + "webp_size": "118030" + }, + "fixed_height_small_still": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/100_s.gif", + "width": "178", + "height": "100", + "size": "15028" + }, + "fixed_height_downsampled": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200_d.gif", + "width": "356", + "height": "200", + "size": "271337", + "webp": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200_d.webp", + "webp_size": "67644" + }, + "preview": { + "width": "288", + "height": "162", + "mp4": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy-preview.mp4", + "mp4_size": "33533" + }, + "fixed_height_small": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/100.gif", + "width": "178", + "height": "100", + "size": "228874", + "mp4": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/100.mp4", + "mp4_size": "32018", + "webp": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/100.webp", + "webp_size": "98440" + }, + "downsized_still": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy-downsized_s.gif", + "width": "480", + "height": "270", + "size": "81453" + }, + "downsized": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy.gif", + "width": "480", + "height": "270", + "size": "1559692" + }, + "downsized_large": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy.gif", + "width": "480", + "height": "270", + "size": "1559692" + }, + "fixed_width_small_still": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/100w_s.gif", + "width": "100", + "height": "56", + "size": "6133" + }, + "preview_webp": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy-preview.webp", + "width": "197", + "height": "111", + "size": "47558" + }, + "fixed_width_still": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200w_s.gif", + "width": "200", + "height": "112", + "size": "18788" + }, + "fixed_width_small": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/100w.gif", + "width": "100", + "height": "56", + "size": "77129", + "mp4": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/100w.mp4", + "mp4_size": "13271", + "webp": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/100w.webp", + "webp_size": "46988" + }, + "downsized_small": { + "width": "480", + "height": "270", + "mp4": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy-downsized-small.mp4", + "mp4_size": "138782" + }, + "fixed_width_downsampled": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200w_d.gif", + "width": "200", + "height": "112", + "size": "96656", + "webp": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200w_d.webp", + "webp_size": "28958" + }, + "downsized_medium": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy.gif", + "width": "480", + "height": "270", + "size": "1559692" + }, + "original": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy.gif", + "width": "480", + "height": "270", + "size": "1559692", + "frames": "27", + "mp4": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy.mp4", + "mp4_size": "138782", + "webp": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy.webp", + "webp_size": "403460", + "hash": "e3b884f00e92d19821375e30a898c805" + }, + "fixed_height": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200.gif", + "width": "356", + "height": "200", + "size": "904798", + "mp4": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200.mp4", + "mp4_size": "87744", + "webp": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/200.webp", + "webp_size": "269576" + }, + "hd": { + "width": "1280", + "height": "720", + "mp4": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy-hd.mp4", + "mp4_size": "533533" + }, + "looping": { + "mp4": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy-loop.mp4", + "mp4_size": "1053661" + }, + "original_mp4": { + "width": "480", + "height": "270", + "mp4": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy.mp4", + "mp4_size": "138782" + }, + "preview_gif": { + "url": "https://media1.giphy.com/media/l49JIgBhX4X6hyCGY/giphy-preview.gif", + "width": "160", + "height": "90", + "size": "49009" + }, + "480w_still": { + "url": "https://media0.giphy.com/media/l49JIgBhX4X6hyCGY/480w_s.jpg", + "width": "480", + "height": "270" + } + }, + "title": "cary elwes water GIF by ADWEEK" + } + ], + "pagination": { + "total_count": 94737, + "count": 1, + "offset": 0 + }, + "meta": { + "status": 200, + "msg": "OK", + "response_id": "5ae3b0835968384a49dc3afb" + } +}'''; diff --git a/test/giphy_client_test.dart b/test/giphy_client_test.dart new file mode 100644 index 0000000..05417e5 --- /dev/null +++ b/test/giphy_client_test.dart @@ -0,0 +1,131 @@ +import 'dart:io'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:giphy_selector/giphy_selector.dart'; +import 'package:http/http.dart'; +import 'package:mockito/mockito.dart'; + +class MockClient extends Mock implements Client {} + +Future main() async { + var apiKey = Platform.environment['GIPHY_API_KEY'] ?? ''; + + group('GiphyClient', () { + test('should fetch trending gifs', () async { + final client = GiphyClient( + apiKey: apiKey, + randomId: '', + ); + + final collection = await client.trending(); + + expect(collection, const TypeMatcher()); + }); + + test('should search gifs', () async { + final client = GiphyClient( + apiKey: apiKey, + randomId: '', + ); + + final collection = await client.search(''); + + expect(collection, const TypeMatcher()); + }); + + test('should fetch emojis', () async { + final client = GiphyClient( + apiKey: apiKey, + randomId: '', + ); + + final collection = await client.emojis(); + + expect(collection, const TypeMatcher()); + }); + + test('should load a random gif', () async { + final client = GiphyClient( + apiKey: apiKey, + randomId: '', + ); + + final gif = await client.random(tag: ''); + + expect(gif, const TypeMatcher()); + }); + + test('should load a gif by id', () async { + final client = GiphyClient( + apiKey: apiKey, + randomId: '', + ); + + final gif = await client.byId('l46Cc0Ped9R0uiTkY'); + + expect(gif, const TypeMatcher()); + expect(gif.title?.toLowerCase(), + 'Beyonce freedom GIF by BET Awards'.toLowerCase()); + }); + + test('should parse gifs correctly', () async { + final client = GiphyClient( + apiKey: apiKey, + randomId: '', + ); + + // Gif Validation + final gif = (await client.trending()).data.first; + expect(gif.rating, GiphyRating.g); + expect(gif.type, 'gif'); + }); + + test('should parse users correctly', () async { + final client = GiphyClient( + apiKey: apiKey, + randomId: '', + ); + + // Gif Validation + final user = (await client.trending()).data.first.user; + + expect(user?.profileUrl, isNotNull); + }); + + test('should parse images correctly', () async { + final client = GiphyClient( + apiKey: apiKey, + randomId: '', + ); + + // Gif Validation + final images = (await client.trending()).data.first.images; + expect(images!.fixedHeightStill, const TypeMatcher()); + expect(images.originalStill, const TypeMatcher()); + // expect(images.fixedWidth, GiphyFullImage()); + expect( + images.fixedHeightSmallStill, const TypeMatcher()); + // expect( + // images.fixedHeightDownsampled, + // GiphyDownsampledImage(), + // ); + expect(images.preview, const TypeMatcher()); + expect(images.fixedHeightSmall, const TypeMatcher()); + expect(images.downsizedStill, const TypeMatcher()); + expect(images.downsized, const TypeMatcher()); + expect(images.downsizedLarge, const TypeMatcher()); + expect(images.fixedWidthSmallStill, const TypeMatcher()); + expect(images.previewWebp, const TypeMatcher()); + expect(images.fixedWidthStill, const TypeMatcher()); + expect(images.fixedWidthSmall, const TypeMatcher()); + expect(images.downsizedSmall, const TypeMatcher()); + expect(images.downsizedMedium, const TypeMatcher()); + expect(images.original, const TypeMatcher()); + expect(images.fixedHeight, const TypeMatcher()); + expect(images.looping, const TypeMatcher()); + expect(images.originalMp4, const TypeMatcher()); + expect(images.previewGif, const TypeMatcher()); + expect(images.w480Still, const TypeMatcher()); + }); + }); +} diff --git a/test/giphy_get_test.dart b/test/giphy_get_test.dart new file mode 100644 index 0000000..769caf0 --- /dev/null +++ b/test/giphy_get_test.dart @@ -0,0 +1,18 @@ +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + const MethodChannel channel = MethodChannel('giphy_get'); + + TestWidgetsFlutterBinding.ensureInitialized(); + + setUp(() { + channel.setMockMethodCallHandler((MethodCall methodCall) async { + return '42'; + }); + }); + + tearDown(() { + channel.setMockMethodCallHandler(null); + }); +} diff --git a/test/giphy_selector_method_channel_test.dart b/test/giphy_selector_method_channel_test.dart new file mode 100644 index 0000000..b5286d9 --- /dev/null +++ b/test/giphy_selector_method_channel_test.dart @@ -0,0 +1,24 @@ +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:giphy_selector/giphy_selector_method_channel.dart'; + +void main() { + MethodChannelGiphySelector platform = MethodChannelGiphySelector(); + const MethodChannel channel = MethodChannel('giphy_selector'); + + TestWidgetsFlutterBinding.ensureInitialized(); + + setUp(() { + channel.setMockMethodCallHandler((MethodCall methodCall) async { + return '42'; + }); + }); + + tearDown(() { + channel.setMockMethodCallHandler(null); + }); + + test('getPlatformVersion', () async { + expect(await platform.getPlatformVersion(), '42'); + }); +}