Compare commits

..

No commits in common. "master" and "no-piracy" have entirely different histories.

5 changed files with 88 additions and 27 deletions

View file

@ -36,9 +36,9 @@ jobs:
cat .inject/code.js >> ${{ steps.retypebuild.outputs.retype-output-path }}/resources/js/retype.js
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
uses: actions/upload-pages-artifact@v1.0.8
with:
path: ${{ steps.retypebuild.outputs.retype-output-path }}
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@v1

View file

@ -13,7 +13,7 @@ Anime tracking process works with **only anime extensions**. So, it'll not work
___
## Login Process
[!badge variant="light" text="Step 1"] [!badge variant="dark" icon="gear" text="Settings"] → [!badge variant="dark" icon="" text="Accounts"] → **Choose AL, Kitsu or MAL**. For this guide we are choosing AL.
[!badge variant="light" text="Step 1"] [!badge variant="dark" icon="gear" text="Settings"] → [!badge variant="dark" icon="" text="Accounts"] → **Choose AL or MAL**. For this guide we are choosing AL.
[!badge variant="light" text="Step 2"] The app will forward to the default browser to login. Now **Login and authorize** the app. The site will return you the cloudstream app.
@ -25,12 +25,11 @@ If the log in process is successful, you will see a pop text and there will be y
___
## Tracking
- When you go to the eps page of an anime, you will see the tracker icon (Logo of AL, Kitsu or MAL) at the top right corner. Click on that and you will see the tracking menu.
- When you go to the eps page of an anime, you will see the tracker icon (Logo of AL or MAL) at the top right corner. Click on that and you will see the tracking menu.
![image](https://cdn.discordapp.com/attachments/1021835706680745994/1029982148838563840/unknown.png)
- The tracker will **automatically** track your anime after finishing the eps. Or you can **manually** input the number of eps you have watched.
![](https://cdn.discordapp.com/attachments/1021835706680745994/1029982662699536384/unknown.png)
![](https://cdn.discordapp.com/attachments/1021835706680745994/1029982861371113512/unknown.png)
- Also, the **status** of the anime and the **rating** can be set from the tracking menu
- Also, the **status** of the anime and the **rating** can be set from the tracking menu

View file

@ -4,4 +4,26 @@ icon: repo
order: 1000
---
See the CloudStream Wiki page for an up to date [list of extensions](https://cloudstream.miraheze.org/wiki/List_of_extensions)
Repositories contain all the website extensions. These repositories are built by the community members. The flag beside the repository indicates the language of the websites that the repository has.
Direct Install | Short Codes { class="compact" }
:---: | :---:
[!badge variant="secondary" icon="static/gb.png" text="English"](https://cutt.ly/6wyw1RnS) | `6wyw1RnS`
[!badge variant="secondary" icon="static/world.png" text="Multilingual"](https://cutt.ly/Bwyw1S3k) | `Bwyw1S3k`
[!badge variant="secondary" icon="static/jo.png" text="Arabic"](https://cutt.ly/Jwyw1ZiR) | `Jwyw1ZiR`
[!badge variant="secondary" icon="static/world.png" text="Hexated"](https://cutt.ly/mwyw140i) | `mwyw140i`
[!badge variant="secondary" icon="static/in.png" text="Likdev"](https://cutt.ly/bwyw0Mcv) | `bwyw0Mcv`
[!badge variant="secondary" icon="static/es.png" text="Storm"](https://cutt.ly/Swyw03Nc) | `Swyw03Nc`
[!badge variant="secondary" icon="static/cr.png" text="Crunchyroll"](https://cutt.ly/wwyw2e4x) | `wwyw2e4x`
[!badge variant="secondary" icon="static/fr.png" text="French"](https://cutt.ly/jwyw2fJc) | `jwyw2fJc`
[!badge variant="secondary" icon="static/cn.png" text="Horis"](https://cutt.ly/Owyw2lbO) | `Owyw2lbO`
[!badge variant="secondary" icon="static/18p.png" text="NSFW"](https://cutt.ly/Nwyw2nbE) | `Nwyw2nbE`
[!badge variant="secondary" icon="static/ua.png" text="CakesTwix"](https://cutt.ly/gwyw2YuE) | `gwyw2YuE`
[!badge variant="secondary" icon="static/fr.png" text="FStream"](https://cutt.ly/fstream) | `fstream`
[!badge variant="secondary" icon="static/world.png" text="Avocado"](https://cutt.ly/aguaco) | `aguaco`
[!badge variant="secondary" icon="static/tr.png" text="Turkish"](https://cutt.ly/KekikAkademi) | `KekikAkademi`
[!badge variant="secondary" icon="static/jo.png" text="Arabico"](https://cutt.ly/0wF96Vs1) | `0wF96Vs1`
!!!info
if you don't understand the name of a repository, the repository was named after the developer of that repository.
!!!!

View file

@ -8,10 +8,10 @@ icon: repo
Providers in CloudStream consists primarily of 4 different parts:
- [Searching](https://recloudstream.github.io/dokka/library/com.lagradost.cloudstream3/-main-a-p-i/index.html#498495168%2FFunctions%2F-449184558)
- [Loading the home page](https://recloudstream.github.io/dokka/library/com.lagradost.cloudstream3/-main-a-p-i/index.html#1356482668%2FFunctions%2F-449184558)
- [Loading the result page](https://recloudstream.github.io/dokka/library/com.lagradost.cloudstream3/-main-a-p-i/index.html#1671784382%2FFunctions%2F-449184558)
- [Loading the video links](https://recloudstream.github.io/dokka/library/com.lagradost.cloudstream3/-main-a-p-i/index.html#-930139416%2FFunctions%2F-449184558)
- [Searching](https://recloudstream.github.io/dokka/-cloudstream/com.lagradost.cloudstream3/-main-a-p-i/index.html#498495168%2FFunctions%2F101969414)
- [Loading the home page](https://recloudstream.github.io/dokka/-cloudstream/com.lagradost.cloudstream3/-main-a-p-i/index.html#1356482668%2FFunctions%2F101969414)
- [Loading the show page](https://recloudstream.github.io/dokka/-cloudstream/com.lagradost.cloudstream3/-main-a-p-i/index.html#1671784382%2FFunctions%2F101969414)
- [Loading the video links](https://recloudstream.github.io/dokka/-cloudstream/com.lagradost.cloudstream3/-main-a-p-i/index.html#-930139416%2FFunctions%2F101969414)
When making a provider it is important that you are confident you can scrape the video links first!
Video links are often the most protected part of the website and if you cannot scrape them then the provider is useless.
@ -24,7 +24,7 @@ Looking at how some extensions work alongside reading this will likely help a lo
## 1. Searching
This one is probably the easiest, based on a query you should return a list of [SearchResponse](https://recloudstream.github.io/dokka/library/com.lagradost.cloudstream3/-search-response/index.html)
This one is probably the easiest, based on a query you should return a list of [SearchResponse](https://recloudstream.github.io/dokka/app/com.lagradost.cloudstream3/-search-response/index.html)
Scraping the search results is essentially just finding the search item elements on the site (red box) and looking in them to find name, url and poster url and put the data in a SearchResponse.
@ -51,7 +51,7 @@ private fun Element.toSearchResponse(): LiveSearchResponse? {
// If no link element then it's no a valid search response
val link = this.select("div.alternative a").last() ?: return null
// fixUrl is a built in function to convert urls like /watch?v=..... to https://www.youtube.com/watch?v=.....
val href = link.attr("href")
val href = fixUrl(link.attr("href"))
val img = this.selectFirst("div.thumb img")
// Optional parameter, scraping languages are not required but might be nice on some sites
val lang = this.selectFirst(".card-title > a")?.attr("href")?.removePrefix("?country=")
@ -59,15 +59,15 @@ private fun Element.toSearchResponse(): LiveSearchResponse? {
// There are many types of searchresponses but mostly you will be using AnimeSearchResponse, MovieSearchResponse
// and TvSeriesSearchResponse, all with different parameters (like episode count)
return newLiveSearchResponse(
return LiveSearchResponse(
// Kinda hack way to get the title
img?.attr("alt")?.replaceFirst("Watch ", "") ?: return null,
href,
TvType.Live
) {
this.posterUrl = fixUrl(img.attr("src"))
this.lang = lang
}
this@EjaTv.name,
TvType.Live,
fixUrl(img.attr("src")),
lang = lang
)
}
```
@ -87,7 +87,7 @@ override val mainPage = mainPageOf(
```
This dictates what the getMainPage function will be receiving as function arguments.
Basically when the recent dubbed media should be loaded the getMainPage gets called with a page number and the request you defined above.
Basically when the recent dubbed shows should be loaded the getMainPage gets called with a page number and the request you defined above.
```kotlin
@ -141,9 +141,9 @@ responses when the user has scrolled to the end.
TLDR: Exactly like searching but you defined your own queries.
## 3. Loading the result page
## 3. Loading the show page
The media result page is a bit more complex than search results, but it uses the same logic used to get search results: using CSS selectors and regex to parse html into a kotlin object. With the amount of info being parsed this function can get quite big, but the fundamentals are still pretty simple.
The show page is a bit more complex than search results, but it uses the same logic used to get search results: using CSS selectors and regex to parse html into a kotlin object. With the amount of info being parsed this function can get quite big, but the fundamentals are still pretty simple.
The only difficultuy is getting the episodes, they are not always not part of the html. Check if any extra requests are sent in your browser when visiting the episodes page.
**NOTE**: Episodes in CloudStream are not paginated, meaning that if you have a show with 21 seasons, all on different website pages you will need to parse them all.
@ -224,14 +224,14 @@ A function can look something like this:
val recUrl = fixUrlNull(titleHeader.attr("href")) ?: return@mapNotNull null
val recTitle = titleHeader.text() ?: return@mapNotNull null
val poster = element.select("div.film-poster > img").attr("data-src")
newMovieSearchResponse(
MovieSearchResponse(
recTitle,
recUrl,
this.name,
if (recUrl.contains("/movie/")) TvType.Movie else TvType.TvSeries,
false
) {
this.posterUrl = poster
}
poster,
year = null
)
}
if (isMovie) {

40
recsrc.md Normal file
View file

@ -0,0 +1,40 @@
---
label: Recommended Sources
icon: star
order: 999
---
## English
### Movies & TV Series
1. Sorastream `Hexated`
2. Superstream `English`
3. Sflix bundle `English`
4. AllMoviesForYou `English`
### Anime
1. Anichi `Hexated`
2. 9anime `Avocado`
3. KronchEN/Kwunchwoll `Avocado`
4. Aniwatch `English`
5. Kickassanime `Hexated`
6. Allanime `English`
7. Sorastream `Hexated`
8. Yugenanime `Hexated`
9. Animension `Storm`
10. Gogo `English`
### Asian Contents
1. Sorastream `Hexated`
2. Kisskh `Hexated`
3. Kissasian `Hexated`
4. Dramacool `Horis`
5. Sflix bundle `English`
6. ShowFlix `Indian languages`
### Livestreams
1. IPTV-org (TV) `Multilingual`
2. Time4TV (Sports) `Hexated`
3. TV247 `Hexated`
4. 123TV `Hexated`
5. Crichd `Darkdemon`