[[facebook-component]]
= Facebook Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-facebook/src/main/docs/facebook-component.adoc
:docTitle: Facebook
:artifactId: camel-facebook
:description: Send requests to Facebook APIs supported by Facebook4J.
:since: 2.14
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

The Facebook component provides access to all of the Facebook APIs
accessible using https://facebook4j.github.io/en/index.html[Facebook4J]. It
allows producing messages to retrieve, add, and delete posts, likes,
comments, photos, albums, videos, photos, checkins, locations, links,
etc. It also supports APIs that allow polling for posts, users,
checkins, groups, locations, etc.

Facebook requires the use of OAuth for all client application
authentication. In order to use camel-facebook with your account, you'll
need to create a new application within Facebook at
https://developers.facebook.com/apps[https://developers.facebook.com/apps]
and grant the application access to your account. The Facebook
application's id and secret will allow access to Facebook APIs which do
not require a current user. A user access token is required for APIs
that require a logged in user. More information on obtaining a user
access token can be found at
https://developers.facebook.com/docs/facebook-login/access-tokens/[https://developers.facebook.com/docs/facebook-login/access-tokens/].

Maven users will need to add the following dependency to their pom.xml
for this component:

[source,java]
-----------------------------------------------
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-facebook</artifactId>
        <version>${camel-version}</version>
    </dependency>
-----------------------------------------------

== URI format

[source,java]
---------------------------------
  facebook://[endpoint]?[options]
---------------------------------

== FacebookComponent

The facebook component can be configured with the Facebook account
settings below, which are mandatory. The values can be provided to the
component using the bean property *configuration* of type
*org.apache.camel.component.facebook.config.FacebookConfiguration*. The
*oAuthAccessToken* option may be ommited but that will only allow access
to application APIs.




// component options: START
The Facebook component supports 31 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *clientURL* (common) | Facebook4J API client URL |  | String
| *clientVersion* (common) | Facebook4J client API version |  | String
| *debugEnabled* (common) | Enables deubg output. Effective only with the embedded logger | false | Boolean
| *gzipEnabled* (common) | Use Facebook GZIP encoding | true | Boolean
| *httpConnectionTimeout* (common) | Http connection timeout in milliseconds | 20000 | Integer
| *httpDefaultMaxPerRoute* (common) | HTTP maximum connections per route | 2 | Integer
| *httpMaxTotalConnections* (common) | HTTP maximum total connections | 20 | Integer
| *httpReadTimeout* (common) | Http read timeout in milliseconds | 120000 | Integer
| *httpRetryCount* (common) | Number of HTTP retries | 0 | Integer
| *httpRetryIntervalSeconds* (common) | HTTP retry interval in seconds | 5 | Integer
| *httpStreamingReadTimeout* (common) | HTTP streaming read timeout in milliseconds | 40000 | Integer
| *jsonStoreEnabled* (common) | If set to true, raw JSON forms will be stored in DataObjectFactory | false | Boolean
| *mbeanEnabled* (common) | If set to true, Facebook4J mbean will be registerd | false | Boolean
| *prettyDebugEnabled* (common) | Prettify JSON debug output if set to true | false | Boolean
| *restBaseURL* (common) | API base URL | https://graph.facebook.com/ | String
| *useSSL* (common) | Use SSL | true | Boolean
| *videoBaseURL* (common) | Video API base URL | https://graph-video.facebook.com/ | String
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *configuration* (advanced) | To use the shared configuration |  | FacebookConfiguration
| *httpProxyHost* (proxy) | HTTP proxy server host name |  | String
| *httpProxyPassword* (proxy) | HTTP proxy server password |  | String
| *httpProxyPort* (proxy) | HTTP proxy server port |  | Integer
| *httpProxyUser* (proxy) | HTTP proxy server user name |  | String
| *oAuthAccessToken* (security) | The user access token |  | String
| *oAuthAccessTokenURL* (security) | OAuth access token URL | https://graph.facebook.com/oauth/access_token | String
| *oAuthAppId* (security) | The application Id |  | String
| *oAuthAppSecret* (security) | The application Secret |  | String
| *oAuthAuthorizationURL* (security) | OAuth authorization URL | https://www.facebook.com/dialog/oauth | String
| *oAuthPermissions* (security) | Default OAuth permissions. Comma separated permission names. See \https://developers.facebook.com/docs/reference/login/#permissions for the detail |  | String
|===
// component options: END





// endpoint options: START
The Facebook endpoint is configured using URI syntax:

----
facebook:methodName
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *methodName* | *Required* What operation to perform |  | String
|===


=== Query Parameters (104 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *achievementURL* (common) | The unique URL of the achievement |  | URL
| *albumId* (common) | The album ID |  | String
| *albumUpdate* (common) | The facebook Album to be created or updated |  | AlbumUpdate
| *appId* (common) | The ID of the Facebook Application |  | String
| *center* (common) | Location latitude and longitude |  | GeoLocation
| *checkinId* (common) | The checkin ID |  | String
| *checkinUpdate* (common) | *Deprecated* The checkin to be created. Deprecated, instead create a Post with an attached location |  | CheckinUpdate
| *clientURL* (common) | Facebook4J API client URL |  | String
| *clientVersion* (common) | Facebook4J client API version |  | String
| *commentId* (common) | The comment ID |  | String
| *commentUpdate* (common) | The facebook Comment to be created or updated |  | CommentUpdate
| *debugEnabled* (common) | Enables deubg output. Effective only with the embedded logger | false | Boolean
| *description* (common) | The description text |  | String
| *distance* (common) | Distance in meters |  | Integer
| *domainId* (common) | The domain ID |  | String
| *domainName* (common) | The domain name |  | String
| *domainNames* (common) | The domain names |  | List
| *eventId* (common) | The event ID |  | String
| *eventUpdate* (common) | The event to be created or updated |  | EventUpdate
| *friendId* (common) | The friend ID |  | String
| *friendlistId* (common) | The friend list ID |  | String
| *friendlistName* (common) | The friend list Name |  | String
| *friendUserId* (common) | The friend user ID |  | String
| *groupId* (common) | The group ID |  | String
| *gzipEnabled* (common) | Use Facebook GZIP encoding | true | Boolean
| *httpConnectionTimeout* (common) | Http connection timeout in milliseconds | 20000 | Integer
| *httpDefaultMaxPerRoute* (common) | HTTP maximum connections per route | 2 | Integer
| *httpMaxTotalConnections* (common) | HTTP maximum total connections | 20 | Integer
| *httpReadTimeout* (common) | Http read timeout in milliseconds | 120000 | Integer
| *httpRetryCount* (common) | Number of HTTP retries | 0 | Integer
| *httpRetryIntervalSeconds* (common) | HTTP retry interval in seconds | 5 | Integer
| *httpStreamingReadTimeout* (common) | HTTP streaming read timeout in milliseconds | 40000 | Integer
| *ids* (common) | The ids of users |  | List
| *inBody* (common) | Sets the name of a parameter to be passed in the exchange In Body |  | String
| *includeRead* (common) | Enables notifications that the user has already read in addition to unread ones |  | Boolean
| *isHidden* (common) | Whether hidden |  | Boolean
| *jsonStoreEnabled* (common) | If set to true, raw JSON forms will be stored in DataObjectFactory | false | Boolean
| *link* (common) | Link URL |  | URL
| *linkId* (common) | Link ID |  | String
| *locale* (common) | Desired FQL locale |  | Locale
| *mbeanEnabled* (common) | If set to true, Facebook4J mbean will be registerd | false | Boolean
| *message* (common) | The message text |  | String
| *messageId* (common) | The message ID |  | String
| *metric* (common) | The metric name |  | String
| *milestoneId* (common) | The milestone id |  | String
| *name* (common) | Test user name, must be of the form 'first last' |  | String
| *noteId* (common) | The note ID |  | String
| *notificationId* (common) | The notification ID |  | String
| *objectId* (common) | The insight object ID |  | String
| *offerId* (common) | The offer id |  | String
| *optionDescription* (common) | The question's answer option description |  | String
| *pageId* (common) | The page id |  | String
| *permissionName* (common) | The permission name |  | String
| *permissions* (common) | Test user permissions in the format perm1,perm2,... |  | String
| *photoId* (common) | The photo ID |  | String
| *pictureId* (common) | The picture id |  | Integer
| *pictureId2* (common) | The picture2 id |  | Integer
| *pictureSize* (common) | The picture size. The value can be one of: square, small, normal, large, thumbnail, album |  | PictureSize
| *placeId* (common) | The place ID |  | String
| *postId* (common) | The post ID |  | String
| *postUpdate* (common) | The post to create or update |  | PostUpdate
| *prettyDebugEnabled* (common) | Prettify JSON debug output if set to true | false | Boolean
| *queries* (common) | FQL queries |  | Map
| *query* (common) | FQL query or search terms for search endpoints |  | String
| *questionId* (common) | The question id |  | String
| *reading* (common) | Optional reading parameters. See Reading Options(#reading) |  | Reading
| *readingOptions* (common) | To configure Reading using key/value pairs from the Map. |  | Map
| *restBaseURL* (common) | API base URL | https://graph.facebook.com/ | String
| *scoreValue* (common) | The numeric score with value |  | Integer
| *size* (common) | The picture size, one of large, normal, small or square. The value can be one of: square, small, normal, large, thumbnail, album |  | PictureSize
| *source* (common) | The media content from either a java.io.File or java.io.Inputstream |  | Media
| *subject* (common) | The note of the subject |  | String
| *tabId* (common) | The tab id |  | String
| *tagUpdate* (common) | Photo tag information |  | TagUpdate
| *testUser1* (common) | Test user 1 |  | TestUser
| *testUser2* (common) | Test user 2 |  | TestUser
| *testUserId* (common) | The ID of the test user |  | String
| *title* (common) | The title text |  | String
| *toUserId* (common) | The ID of the user to tag |  | String
| *toUserIds* (common) | The IDs of the users to tag |  | List
| *userId* (common) | The Facebook user ID |  | String
| *userId1* (common) | The ID of a user 1 |  | String
| *userId2* (common) | The ID of a user 2 |  | String
| *userIds* (common) | The IDs of users to invite to event |  | List
| *userLocale* (common) | The test user locale |  | String
| *useSSL* (common) | Use SSL | true | Boolean
| *videoBaseURL* (common) | Video API base URL | https://graph-video.facebook.com/ | String
| *videoId* (common) | The video ID |  | String
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. The value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *httpProxyHost* (proxy) | HTTP proxy server host name |  | String
| *httpProxyPassword* (proxy) | HTTP proxy server password |  | String
| *httpProxyPort* (proxy) | HTTP proxy server port |  | Integer
| *httpProxyUser* (proxy) | HTTP proxy server user name |  | String
| *oAuthAccessToken* (security) | The user access token |  | String
| *oAuthAccessTokenURL* (security) | OAuth access token URL | https://graph.facebook.com/oauth/access_token | String
| *oAuthAppId* (security) | The application Id |  | String
| *oAuthAppSecret* (security) | The application Secret |  | String
| *oAuthAuthorizationURL* (security) | OAuth authorization URL | https://www.facebook.com/dialog/oauth | String
| *oAuthPermissions* (security) | Default OAuth permissions. Comma separated permission names. See \https://developers.facebook.com/docs/reference/login/#permissions for the detail |  | String
|===
// endpoint options: END



== Producer Endpoints:

Producer endpoints can use endpoint names and options from the table
below. Endpoints can also use the short name without the *get* or
*search* prefix, except *checkin* due to ambiguity between *getCheckin*
and *searchCheckin*. Endpoint options that are not mandatory are denoted
by [].

Producer endpoints can also use a special option **inBody** that in turn
should contain the name of the endpoint option whose value will be
contained in the Camel Exchange In message. For example, the facebook
endpoint in the following route retrieves activities for the user id
value in the incoming message body.

[source,java]
--------------------------------------------------------------------
    from("direct:test").to("facebook://activities?inBody=userId")...
--------------------------------------------------------------------

Any of the endpoint options can be provided in either the endpoint URI,
or dynamically in a message header. The message header name must be of
the format `CamelFacebook.option`.
For example, the *userId* option value in the previous route could
alternately be provided in the message header *CamelFacebook.userId*.
Note that the inBody option overrides message header, e.g. the endpoint
option *inBody=user* would override a *CamelFacebook.userId* header.

Endpoints that return a String return an Id for the created or modified
entity, e.g. *addAlbumPhoto* returns the new album Id. Endpoints that
return a boolean, return true for success and false otherwise. In case
of Facebook API errors the endpoint will throw a RuntimeCamelException
with a facebook4j.FacebookException cause.

== Consumer Endpoints:

Any of the producer endpoints that take a
reading parameter can be used as a consumer endpoint. The polling consumer uses
the *since* and *until* fields to get responses within the polling
interval. In addition to other reading fields, an initial *since* value
can be provided in the endpoint for the first poll.

Rather than the endpoints returning a List (or
*facebook4j.ResponseList*) through a single route exchange,
camel-facebook creates one route exchange per returned object. As an
example, if *"facebook://home"* results in five posts, the route will be
executed five times (once for each Post).

== Reading Options

The *reading* option of type *facebook4j.Reading* adds support for
reading parameters, which allow selecting specific fields, limits the
number of results, etc. For more information see
https://developers.facebook.com/docs/reference/api/#reading[Graph API documentation].

It is also used by consumer endpoints to poll Facebook data to avoid
sending duplicate messages across polls.

The reading option can be a reference or value of type
*facebook4j.Reading*, or can be specified using the following reading
options in either the endpoint URI or exchange header with
*CamelFacebook.* prefix.

== Message header

Any of the URI options can be provided in a message header for producer
endpoints with `CamelFacebook.` prefix.

== Message body

All result message bodies utilize objects provided by the Facebook4J
API. Producer endpoints can specify the option name for incoming message
body in the *inBody* endpoint parameter.

For endpoints that return an array, or *facebook4j.ResponseList*, or
*java.util.List*, a consumer endpoint will map every elements in the
list to distinct messages.

== Use cases

To create a post within your Facebook profile, send this producer a
facebook4j.PostUpdate body.

[source,java]
----------------------------------------------------
    from("direct:foo")
        .to("facebook://postFeed/inBody=postUpdate);
----------------------------------------------------

To poll, every 5 sec (You can set the xref:{eip-vc}:eips:polling-consumer.adoc[polling
consumer] options by adding a prefix of "consumer"), all statuses on
your home feed:

[source,java]
-----------------------------------------------
    from("facebook://home?delay=5000")
        .to("bean:blah");
-----------------------------------------------

Searching using a producer with dynamic options from header.

In the bar header we have the Facebook search string we want to execute
in public posts, so we need to assign this value to the
CamelFacebook.query header.

[source,java]
--------------------------------------------------------
    from("direct:foo")
        .setHeader("CamelFacebook.query", header("bar"))
        .to("facebook://posts");
--------------------------------------------------------

include::camel-spring-boot::page$facebook-starter.adoc[]
