Skip to content

Commit

Permalink
add more variables in site_model
Browse files Browse the repository at this point in the history
  • Loading branch information
thitlwincoder committed Oct 4, 2023
1 parent 6b05d84 commit b5dac8e
Show file tree
Hide file tree
Showing 10 changed files with 90 additions and 2,093 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.2.1

+ Add `title`, `thumbnail` and `duration` variable in `site_model`

## 0.2.0

+ Fixed not working sites & add more sites
Expand Down
21 changes: 11 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ For those who want to create a movie and downloader app, this is a useful packag

You can get a direct link from the URL that my support sites.

## Support Sites
## Support Websites

- Facebook
- Instagram
Expand Down Expand Up @@ -58,20 +58,21 @@ Use `check` class to check your link have been existed my support sites
```dart
var directLink = DirectLink();
var check = await directLink.check('url'); // add your url
var data = await directLink.check('url'); // add your url
```

### Example

```dart
if (check == null) {
// null condition
}else{
for (var element in check!) {
print(element.quality);
print(element.type);
print(element.link);
}
if (data != null) {
print(data.title);
print(data.thumbnail);
print(data.duration);
for (var e in data.links!) {
print(e.type);
print(e.quality);
print('-' * 20);
}
}
```
Expand Down
2,036 changes: 0 additions & 2,036 deletions data.json

This file was deleted.

16 changes: 9 additions & 7 deletions example/direct_link_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@ void main() async {
var directLink = DirectLink();

var url = 'https://www.facebook.com/watch/?v=336069382196510';
var check = await directLink.check(url);
var data = await directLink.check(url);

if (check != null) {
for (var element in check) {
print(element.quality);
print(element.type);
print(element.link);
print('-' * 10);
if (data != null) {
print(data.title);
print(data.thumbnail);
print(data.duration);
for (var e in data.links!) {
print(e.type);
print(e.quality);
print('-' * 20);
}
}
}
3 changes: 1 addition & 2 deletions lib/direct_link.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// ignore_for_file: public_member_api_docs, sort_constructors_first
library direct_link;

import 'package:html/dom.dart';
Expand All @@ -16,7 +15,7 @@ class DirectLink {
this.executablePath,
});

Future<List<SiteModel>?>? check(
Future<SiteModel?> check(
String url, {
Duration? timeout,
}) {
Expand Down
18 changes: 16 additions & 2 deletions lib/models/site_model.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,27 @@
part of direct_link;

class SiteModel {
final String? title;
final String? thumbnail;
final String? duration;
final List<Link>? links;

SiteModel({
required this.title,
required this.thumbnail,
required this.duration,
required this.links,
});
}

class Link {
final String quality;
final String link;
final String? type;

SiteModel({
Link({
required this.quality,
required this.link,
this.type,
required this.type,
});
}
43 changes: 28 additions & 15 deletions lib/sites/social.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
part of direct_link;

mixin _social {
static Future<List<SiteModel>?> get({
static Future<SiteModel> get({
required String url,
String? executablePath,
Duration? timeout,
}) async {
var result = <SiteModel>[];

var browser = await puppeteer.launch(
executablePath: executablePath,
timeout: timeout,
Expand All @@ -19,34 +17,49 @@ mixin _social {
await page.type('#sf_url', url);
await page.click('#sf_submit');

var d = await page.waitForSelector('.info-box');
await page.waitForSelector('.info-box');

var content = await d!.page.content;
var content = await page.content;
await browser.close();

var body = parse(content);
var linkGroup = body.querySelectorAll('.link-group a');

String? thumbnail =
body.querySelector(".media-result .clip img")?.attributes['src'];

var info = body.querySelector('.info-box')!;

String? title = info.querySelector(".title")?.text;
String? duration = info.querySelector(".duration")?.text;

var linkGroup = info.querySelectorAll('.link-group a');

var links = <Link>[];

if (linkGroup.isNotEmpty) {
for (var e in linkGroup) {
result.add(parseModel(e));
links.add(parseModel(e));
}

return result;
}

var single = body.querySelector('.def-btn-box a');
if (single == null) return result;
if (links.isEmpty) {
var single = body.querySelector('.def-btn-box a');
if (single != null) links.add(parseModel(single));
}

result.add(parseModel(single));
return result;
return SiteModel(
title: title,
thumbnail: thumbnail,
duration: duration,
links: links,
);
}

static SiteModel parseModel(Element e) {
static Link parseModel(Element e) {
var attr = e.attributes;
var quality = e.querySelector('span')?.text ?? e.text;

return SiteModel(
return Link(
quality: quality,
type: attr['data-type'],
link: attr['href']!,
Expand Down
20 changes: 10 additions & 10 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ packages:
dependency: transitive
description:
name: archive
sha256: "20071638cbe4e5964a427cfa0e86dce55d060bc7d82d56f3554095d7239a8765"
sha256: "06a96f1249f38a00435b3b0c9a3246d934d7dbc8183fc7c9e56989860edb99d4"
url: "https://pub.dev"
source: hosted
version: "3.4.2"
version: "3.4.4"
args:
dependency: transitive
description:
Expand Down Expand Up @@ -125,10 +125,10 @@ packages:
dependency: transitive
description:
name: http
sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2"
sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525"
url: "https://pub.dev"
source: hosted
version: "0.13.6"
version: "1.1.0"
http_multi_server:
dependency: transitive
description:
Expand Down Expand Up @@ -261,10 +261,10 @@ packages:
dependency: "direct main"
description:
name: puppeteer
sha256: "43678bb9bd69385cf896ea13fe8c965d95850cba48af8dffd6c130565ebdf5ed"
sha256: efdcbee22832534733ae073f1d13a876ec2a82fadbc42a692beff9673d63f78f
url: "https://pub.dev"
source: hosted
version: "3.4.0"
version: "3.4.1"
shelf:
dependency: transitive
description:
Expand Down Expand Up @@ -357,10 +357,10 @@ packages:
dependency: "direct dev"
description:
name: test
sha256: "9b0dd8e36af4a5b1569029949d50a52cb2a2a2fdaa20cebb96e6603b9ae241f9"
sha256: a20ddc0723556dc6dd56094e58ec1529196d5d7774156604cb14e8445a5a82ff
url: "https://pub.dev"
source: hosted
version: "1.24.6"
version: "1.24.7"
test_api:
dependency: transitive
description:
Expand All @@ -373,10 +373,10 @@ packages:
dependency: transitive
description:
name: test_core
sha256: "4bef837e56375537055fdbbbf6dd458b1859881f4c7e6da936158f77d61ab265"
sha256: "96382d0bc826e260b077bb496259e58bc82e90b603ab16cd5ae95dfe1dfcba8b"
url: "https://pub.dev"
source: hosted
version: "0.5.6"
version: "0.5.7"
typed_data:
dependency: transitive
description:
Expand Down
6 changes: 3 additions & 3 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
name: direct_link
description: Dart package for direct link extractor from URL to stream and download directly.
version: 0.2.0
version: 0.2.1
homepage: https://github.com/thitlwincoder/direct_link

environment:
sdk: ">=3.1.0 <4.0.0"

dependencies:
html: ^0.15.4
puppeteer: ^3.4.0
puppeteer: ^3.4.1

dev_dependencies:
test: ^1.24.6
test: ^1.24.7
lints: ^2.1.1
16 changes: 8 additions & 8 deletions test/direct_link_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,43 +7,43 @@ void main() {
test('facebook', () async {
var url = 'https://www.facebook.com/watch/?v=336069382196510';
var r = await directLink.check(url);
expect(r?.length, 2);
expect(r?.links?.length, 2);
});
test('youtube', () async {
var url = 'https://www.youtube.com/watch?v=kzOO_uplPdk';
var r = await directLink.check(url);
expect(r?.length, 22);
expect(r?.links?.length, 22);
});
test('instagram', () async {
var url = 'https://www.instagram.com/p/CxqNtWSL_bd';
var r = await directLink.check(url);
expect(r?.length, 1);
expect(r?.links?.length, 1);
});
test('twitter', () async {
var url = 'https://twitter.com/i/status/1165444428988743680';
var r = await directLink.check(url);
expect(r?.length, 3);
expect(r?.links?.length, 3);
});
test('dailymotion', () async {
var url = 'https://www.dailymotion.com/video/x84th5e';
var r = await directLink.check(url);
expect(r?.length, 3);
expect(r?.links?.length, 3);
});
test('vk', () async {
var url = 'https://vk.com/video-213802301_456239563';
var r = await directLink.check(url);
expect(r?.length, 14);
expect(r?.links?.length, 14);
});
test('tiktok', () async {
var url =
'https://www.tiktok.com/@kuronushi_/video/7278649121777421576?is_from_webapp=1&sender_device=pc';
var r = await directLink.check(url);
expect(r?.length, 2);
expect(r?.links?.length, 2);
});
test('reddit', () async {
var url =
'https://www.reddit.com/r/Starfield/comments/16uk98o/someone_stole_my_video_and_uploaded_it_acting/';
var r = await directLink.check(url);
expect(r?.length, 5);
expect(r?.links?.length, 5);
});
}

0 comments on commit b5dac8e

Please sign in to comment.