Packages
extwitter
0.14.0
0.14.0
0.13.1
0.13.0
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.0
0.10.0
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.1
0.2.0
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Twitter client library for Elixir.
Current section
Files
Jump to
Current section
Files
lib/extwitter/api/search.ex
defmodule ExTwitter.API.Search do
@moduledoc """
Provides search API interfaces.
"""
import ExTwitter.API.Base
alias ExTwitter.Model.SearchResponse
def search(query, options \\ []) do
case Keyword.fetch(options, :search_metadata) do
{:ok, true} ->
params = ExTwitter.Parser.parse_request_params([q: query] ++ Keyword.drop(options, [:search_metadata]))
search_with_metadata(params)
_ ->
do_search(query, options)
end
end
def search_next_page(metadata) do
if metadata[:next_results] != nil do
params = parse_next_results(metadata[:next_results])
search_with_metadata(params)
else
nil
end
end
defp search_with_metadata(params) do
json = request(:get, "1.1/search/tweets.json", params)
statuses = ExTwitter.JSON.get(json, :statuses) |> Enum.map(&ExTwitter.Parser.parse_tweet/1)
metadata = ExTwitter.JSON.get(json, :search_metadata)
%SearchResponse{statuses: statuses, metadata: metadata}
end
defp do_search(query, options) do
params = ExTwitter.Parser.parse_request_params([q: query] ++ options)
json = request(:get, "1.1/search/tweets.json", params)
ExTwitter.JSON.get(json, :statuses) |> Enum.map(&ExTwitter.Parser.parse_tweet/1)
end
# ref: https://dev.twitter.com/rest/reference/get/search/tweets
# example: "?max_id=249279667666817023&q=%23freebandnames&count=4&include_entities=1&result_type=mixed"
defp parse_next_results(next_results) do
results = String.replace_leading(next_results, "?", "")
Map.to_list(URI.decode_query(results))
end
end