123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- __ __ __
- / // / ____ ____ / /_
- / // /_/ __ `/ _ \/ __/
- /__ __/ /_/ / __/ /_
- /_/ \__, /\___/\__/
- /____/
- + Welcome to the 4get API documentation +
- + Terms of use
- Do NOT misuse the API. Misuses can include... ::
-
- 1. Serp SEO scanning
- 2. Intensive scraping
- 3. Any other activity that isn't triggered by a human
- 4. Illegal activities in Canada
- 5. Constant "test" queries while developping your program
- (please cache the API responses!)
- Examples of good uses of the API ::
-
- 1. A chatroom bot that presents users with search results
- 2. Personal use
- 3. Any other activity that is initiated by a human
- If you wish to engage in the activities listed under "misuses", feel
- free to download the source code of the project and running 4get
- under your own terms. Please respect the terms of use listed here so
- that this website may be available to all in the far future.
- P.s fuck whoever botted my site for months on end, choke on my dick
- lol!!!!
- Get your instance running here ::
- https://git.lolcat.ca/lolcat/4get
- Thanks!
- + Passes
- Depending of the instance, you may need to provide a "pass" token
- in the cookies of your request. These can be obtained from solving
- a captcha which will allow you to make 100 requests in the next 24
- hours. In the future, you will be able to ask the serber maintainer
- for a "pass" which will allow you to bypass the captcha requirement.
-
- The captcha doesn't need javascript to work.
- + Decode the data
- All payloads returned by the API are encoded in the JSON format. If
- you don't know how to tackle the problem, maybe programming is not
- for you.
-
- All of the endpoints use the GET method.
- + Check if an API call was successful
- All API responses come with an array index named "status". If the
- status is something else than the string "ok", something went wrong.
- You can supply the content of the "status" string back to your
- application to inform the user of what went wrong.
-
- The HTTP code will be 429 if your pass is invalid. It is set to 200
- otherwise.
- + Get the next page of results
- All API responses come with an array index named "npt". To get the
- next page of results, you must make another API call with &npt.
-
- Example ::
-
- + First API call
- /api/v1/web?s=higurashi
-
- + Second API call
- /api/v1/web?npt=ddg1._rJ2hWmYSjpI2hsXWmYajJx < ... >
-
- You shouldn't specify the search term, only the &npt parameter
- suffices.
-
- The first part of the token before the dot (ddg1) refers to an
- array position on the serber's memory. The second part is an
- encryption key used to decode the data at that position. This way,
- it is impossible to supply invalid pagination data and it is
- impossible for a 4get operator to peek at the private data of the
- user after a request has been made.
-
- The tokens will expire as soon as they are used or after a 15
- minutes inactivity period, whichever comes first.
- + Beware of null values!
- Most fields in the API responses can return "null". You don't need
- to worry about unset values.
- + API Parameters
- To construct a valid request, you can use the 4get web interface
- to craft a valid request, and replace "/web" with "/api/v1/web".
- + "date" and "time" parameters
- "date" always refer to a calendar date.
- "time" always refer to the duration of some media.
-
- They are both integers that uses seconds as its unit. The "date"
- parameter specifies the number of seconds that passed since January
- 1st 1970.
-
- ______ __ _ __
- / ____/___ ____/ /___ ____ (_)___ / /______
- / __/ / __ \/ __ / __ \/ __ \/ / __ \/ __/ ___/
- / /___/ / / / /_/ / /_/ / /_/ / / / / / /_(__ )
- /_____/_/ /_/\__,_/ .___/\____/_/_/ /_/\__/____/
- /_/
- + /ami4get
- Tells you basic information about the 4get instance. CORS requests
- are allowed on this endpoint.
- + /api/v1/web
- + &extendedsearch
- When using the ddg(DuckDuckGo) scraper, you may make use of the
- &extendedsearch parameter. If you need rich answer data from
- additional sources like StackOverflow, music lyrics sites, etc.,
- you need to specify the value of (string)"true".
-
- The default value is "false" for API calls.
-
-
- + Parse the "spelling"
- The array index named "spelling" contains 3 indexes ::
-
- spelling:
- type: "including"
- using: "4chan"
- correction: '"4cha"'
-
-
- The "type" may be any of these 3 values. When rendering the
- autocorrect text inside your application, it should look like
- what follows right after the parameter value ::
-
- no_correction <Empty>
- including Including results for %using%. Did you mean
- %correction%?
-
- not_many Not many results for %using%. Did you mean
- %correction%?
-
-
- As of right now, the "spelling" is only available on
- "/api/v1/web".
-
-
- + Parse the "answer"
- The array index named "answer" may contain a list of multiple
- answers. The array index "description" contains a linear list of
- nodes that can help you construct rich formatted data inside of
- your application. The structure is similar to the one below:
-
- answer:
- 0:
- title: "Higurashi"
- description:
- 0:
- type: "text"
- value: "Higurashi is a great show!"
- 1:
- type: "quote"
- value: "Source: my ass"
-
-
- Each "description" node contains an array index named "type".
- Here is a list of them:
-
- text
- + title
- italic
- + quote
- + code
- inline_code
- link
- + image
- + audio
-
-
- Each individual node prepended with a "+" should be prepended by
- a newline when constructing the rendered description object.
-
- There are some nodes that differ from the type-value format.
- Please parse them accordingly ::
-
- + link
- type: "link"
- url: "https://lolcat.ca"
- value: "Visit my website!"
-
-
- + image
- type: "image"
- url: "https://lolcat.ca/static/pixels.png"
-
-
- + audio
- type: "audio"
- url: "https://lolcat.ca/static/whatever.mp3"
-
-
- The array index named "table" is an associative array. You can
- loop over the data using this PHP code, for example ::
-
- foreach($table as $website_name => $url){ // ...
-
-
- The rest of the JSON is pretty self explanatory.
-
-
- + /api/v1/images
- All images are contained within "image". The structure looks like
- below ::
-
- image:
- 0:
- title: "My awesome Higurashi image"
- source:
- 0:
- url: "https://lolcat.ca/static/profile_pix.png"
- width: 400
- height: 400
- 1:
- url: "https://lolcat.ca/static/pixels.png"
- width: 640
- height: 640
- 2:
- url: "https://tse1.mm.bing.net/th?id=OIP.VBM3BQg
- euf0-xScO1bl1UgHaGG"
- width: 194
- height: 160
-
-
- The last image of the "source" array is always the thumbnail, and is
- a good fallback to use when other sources fail to load. There can be
- more than 1 source; this is especially true when using the Yandex
- scraper, but beware of captcha rate limits.
-
-
- + /api/v1/videos
- The "time" parameter for videos may be set to "_LIVE". For live
- streams, the amount of people currently watching is passed in
- "views".
- + /api/v1/news
- Just make a request to "/api/v1/news?s=elon+musk". The payload
- has nothing special about it and is very self explanatory, just like
- the endpoint above.
- + /api/v1/music
- Each entry under "song" contains a array index called "stream" that
- looks like this ::
-
- endpoint: sc
- url: https://api-v2.soundcloud <...>
-
-
- When the endpoint is something else than "linear", you MUST use
- the specified endpoint. Otherwise, you are free to handle that
- json+m3u8 crap yourself. If the endpoint is equal to "linear", the
- URL should return a valid HTTP audio stream. To access the endpoint,
- you must add the following prefix in your request, like so:
-
- https://4get.ca/audio/<endpoint>?s=<url>
- + /favicon
- Get the favicon for a website. The only parameter is "s", and must
- include the protocol for fetching in case the favicon is not cached
- yet.
-
- Example ::
-
- /favicon?s=https://lolcat.ca
-
-
- If we had to revert to using Google's favicon cache, it will throw
- an error in the X-Error header field. If Google's favicon cache
- also failed to return an image, or if you're too retarded to specify
- a valid domain name, a default placeholder image will be returned
- alongside the "404" HTTP error code.
- + /proxy
- Get a proxied image. Useful if you don't want to leak your user's IP
- address. The parameters are "i" for the image link and "s" for the
- size.
-
- Acceptable "s" parameters:
-
- portrait 90x160
- landscape 160x90
- square 90x90
- thumb 236x180
- cover 207x270
- original <Original resolution>
-
- You can also ommit the "s" parameter if you wish to view the
- original image. When an error occurs, an "X-Error" header field
- is set.
- + /audio/linear
- Get a proxied audio file. Does not support "Range" headers, as it's
- only used to proxy small files (hence why it's called linear DUH)
-
- The parameter is "s" for the audio link.
- + /audio/sc
- Get a proxied audio file for SoundCloud. Does not support downloads
- trough WGET or CURL, since it returns 30kb~160kb "206 Partial
- Content" parts, due to technical limitations that comes with
- converting m3u8 playlists to seekable audio files. If you use this
- endpoint, you must support these 206 codes and also handle the
- initial 302 HTTP redirect. I used this method as I didn't want to
- store information about your request needlessly. This method also
- allows noJS users to access the files.
-
- The parameter is "s" for the SoundCloud JSON m3u8 abomination. It
- does not support "normal" SoundCloud URLs at this time.
- + /audio/spotify
- Get a proxied Spotify audio file. Accepts a track ID for the "s"
- parameter. Will only allow you to fetch the 30 second preview since
- I don't feel like fucking with cookies and accounts every fucking
- living moment of my life. You must handle the initial 302 redirect
- to the /audio/linear endpoint.
- + Appendix
- If you have any questions or need clarifications, please send an
- email my way to will at lolcat.ca
|