// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
= image:kamelets/twitter-search-source.svg[] Twitter Search Source

*Provided by: "Apache Software Foundation"*

*Support Level for this Kamelet is: "Preview"*

Allows to get all tweets on particular keywords from Twitter.

It requires tokens that can be obtained by creating an application 
in the Twitter developer portal: https://developer.twitter.com/.

== Configuration Options

The following table summarizes the configuration options available for the `twitter-search-source` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *accessToken {empty}* *| Access Token| The Access Token from the Twitter application in the developer portal| string| | 
| *accessTokenSecret {empty}* *| Access Token Secret| The Access Token Secret from the Twitter application in the developer portal| string| | 
| *apiKey {empty}* *| API Key| The API Key from the Twitter application in the developer portal| string| | 
| *apiKeySecret {empty}* *| API Key Secret| The API Key Secret from the Twitter application in the developer portal| string| | 
| *keywords {empty}* *| Keywords| The keywords to use in the Twitter search (Supports Twitter standard operators)| string| | `"Apache Camel"`
|===

NOTE: Fields marked with ({empty}*) are mandatory.

== Usage

This section summarizes how the `twitter-search-source` can be used in various contexts.

=== Knative Source

The `twitter-search-source` Kamelet can be used as Knative source by binding it to a Knative object.

.twitter-search-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: twitter-search-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: twitter-search-source
    properties:
      accessToken: "The Access Token"
      accessTokenSecret: "The Access Token Secret"
      apiKey: "The API Key"
      apiKeySecret: "The API Key Secret"
      keywords: "Apache Camel"
  sink:
    ref:
      kind: InMemoryChannel
      apiVersion: messaging.knative.dev/v1
      name: mychannel
  
----
Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `twitter-search-source-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the source using the following command:

[source,shell]
----
kubectl apply -f twitter-search-source-binding.yaml
----

==== *Dependencies*

The Kamelet needs the following dependencies:


- camel:jackson
- camel:twitter
- camel:kamelet 

==== *Binding to Knative using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind twitter-search-source -p "source.accessToken=The Access Token" -p "source.accessTokenSecret=The Access Token Secret" -p "source.apiKey=The API Key" -p "source.apiKeySecret=The API Key Secret" -p "source.keywords=Apache Camel" channel/mychannel
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

=== Kafka Source

The `twitter-search-source` Kamelet can be used as Kafka source by binding it to a Kafka topic.

.twitter-search-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: twitter-search-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: twitter-search-source
    properties:
      accessToken: "The Access Token"
      accessTokenSecret: "The Access Token Secret"
      apiKey: "The API Key"
      apiKeySecret: "The API Key Secret"
      keywords: "Apache Camel"
  sink:
    ref:
      kind: KafkaTopic
      apiVersion: kafka.strimzi.io/v1beta1
      name: my-topic
  
----

Ensure that you've installed https://strimzi.io/[Strimzi] and created a topic named `my-topic` in the current namespace.
Make also sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `twitter-search-source-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the source using the following command:

[source,shell]
----
kubectl apply -f twitter-search-source-binding.yaml
----

==== *Binding to Kafka using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind twitter-search-source -p "source.accessToken=The Access Token" -p "source.accessTokenSecret=The Access Token Secret" -p "source.apiKey=The API Key" -p "source.apiKeySecret=The API Key Secret" -p "source.keywords=Apache Camel" kafka.strimzi.io/v1beta1:KafkaTopic:my-topic
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
