پیشنهادتون برای دریافت اطلاعات ویدیویی از یک سایت ( حل شده )
دوستان چطوری میتونم اطلاعات یک سایت ویدیویی اعم از لینک ویدیو ، تایتیل و سایر اطلاعات رو بگیرم و ذخیره کنم و در یک لیست ویو نمایش بدم ؟ : 1- با چه روشی درخواست بدم 2- با چه روشی دریافت کنم ؟ 3- چطوری ذخیره کنم و این ویدیوها رو در یک لیست ویو نشون بدم ؟ سپاسگزارم
دوستان لطفا راهنمایی کنید چطوری باید همچین لینکی رو از سورس یک سایت بخونم
| </figure> | |
| <div class="glyphicon glyphicon-play"></div> | |
| </a> | |
| </div> | |
| <div class="col-xs-6 col-sm-6 col-md-3"> | |
| <a href="/video/112548855/به روز ترین ویدیوها" class="video-thumbnail thumbnail"> | |
| <figure> |
به چه طریقی میتونم این کار رو بکنم ؟
دوباره سوالم رو اصلاح می کنم ف مثلا بریم این سایت http://video.varzesh3.com/
و این لینک و لینک های ودیویی مشابه رو بخونیم مانند این لینک
| title="اخبار کوتاه ورزشی؛ کنارهگیری مسی از تیم ملی آرژانتین"> | |
| <img src="http://video.varzesh3.com/wp-content/uploads/080715_akhbarkootah_940417.jpg" width="160" height="106" alt="اخبار کوتاه ورزشی؛ کنارهگیری مسی از تیم ملی آرژانتین"/> | |
| <span>10 دقیقه قبل</span> | |
| <strong>اخبار کوتاه ورزشی؛ کنارهگیری مسی از تیم ملی آرژانتین</strong></a> | |
| </li><li class="firstpage-li"><a href="http://video.varzesh3.com/other-video-clips/other_sport/%d8%af%d8%b1%d8%ae%d8%b4%d8%b4-%d8%a8%d8%a7%d9%86%d9%88%d8%a7%d9%86-%d8%af%d8%b1-%d9%85%d8%b3%d8%a7%d8%a8%d9%82%d8%a7%d8%aa-%d8%af%d8%a7%d9%86%d8%b4%d8%ac%d9%88%db%8c%d8%a7%d9%86-%d8%ac%d9%87%d8%a7/" |
و این لینکها در یک دیتابیس دخیره و در یک لیست ویو به کاربر نشون بدیم ، ممنونم از لطف شما
ابتدا از این آدرس کتابخونه JSOUP رو دانلود کن : لینک
فقط jsoup-1.8.2.jar دانلود بشه
پروژه خودتو درست کن و کتابخونه رو وارد کن.طریقه وارد کردن: روو اسم پروژت کلیک راست کن گزینه properties رو انتخاب کن.از قسمت Java Build Path تب Libraries بر روی Add External JARs کلیک و مسیر کتابخونه ای که دانلود کردی رو بهش بده و open کن.بعد برو تب Order and Export و تیک فایل jsoup رو بزن و به بالای همه منتقلش کن.خب حالا همه چیز آماده است برای کد نویسی.
1-ابتدا دسترسی به اینترنت رو از داخل منیفست تنظیم کن.
2-در داخل اکتیویتی مورد نظر و در قسمت مربوط به onCreate سه تا ArrayList که قراره عنوان و لینک و آدرس تصاویر ویدئوها در اونا قرار بگیره تعریف کن به این طریق:
ArrayList<String> videoLink = new ArrayList<String>(); ArrayList<String> videoImage = new ArrayList<String>(); ArrayList<String> videoTitle = new ArrayList<String>();
3-در این مرحله باید به سایت مورد نظر متصل بشیم و سورس سایت رو داخل یک Document بریزیم به این طریق:
Document doc = Jsoup.connect("http://video.varzesh3.com/").get();
بعد از این کار از ما میخواد که try و catch رو پیاده کنیم که با کلیک رو اون گزینه کد ما به این صورت در میاد:
try {
Document doc = Jsoup.connect("http://video.varzesh3.com/").get();
}
catch (IOException e) {
e.printStackTrace();
}
4-خب تا الان ما تونستیم سورس سایت مورد نظر رو دریافت کنیم.حالا باید یه کم جزئی تر بشیم و اون تیکه از سورس که به درد ما میخوره رو دریافت کنیم.در این مثال ما با محتویاتی که داخل این تگ قرار داره کار داریم : <div id="recent_posts">
برای دریافت کد html ای که داخل این تگ قرار داره به صورت زیر عمل میکنیم:
Element recentVideoHtml = doc.getElementById("recent_posts");
5-خب در این مرحله باز هم باید جزئی تر بشیم و تگهایی که حاوی لینک،آدرس تصاویر و عنوان ویدئوها هستن و داخل المنت recentVideoHtml ریختیم رو انتخاب کنیم به این صورت:
Elements links = recentVideoHtml.select("a[href]");
Elements imgs = recentVideoHtml.select("img[src]");
Elements titles = recentVideoHtml.select("strong");
6-تا اینجا به هدف مورد نظر نرسیدیم و برای دریافت خالص اطلاعات مورد نظرمون به صورت زیر عمل میکنیم:
for (Element link: links) {
videoLink.add(link.attr("href"));
}
for (Element img: imgs) {
videoImage.add(img.attr("src"));
}
for (Element title: titles) {
videoTitle.add(title.text());
}
توضیحات: برای حلقه ی اول ما تعریف کردیم تا زمانی که المنت links وجود داره حلقه ادامه داشته باشه و در هر تکرار مقدار links داخل link ریخته میشه و با دستور:
link.attr("href")
از تگ a href> مقدار اتریبیوت href رو دریافت میکنیم و با دستور گفته شده داخل آرایه میریزیم (همزمان با خوندن توضیحات به سورس سایت هم توجه بشه تا فهم مطالب راحتر باشه).
برای حلقه دومی هم به این گونه عمل میشه.
برای سومی یه کم متفاوته چون سورس html اون فرق داره و ما باید مقدار تگ <strong> رو بخونیم.
تموم شد.سوالی بود در خدمتم.
سورس کامل:
package com.example.app.aparat;
import java.io.IOException;
import java.util.ArrayList;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class AparatActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<String> videoLink = new ArrayList<String>();
ArrayList<String> videoImage = new ArrayList<String>();
ArrayList<String> videoTitle = new ArrayList<String>();
try {
Document doc = Jsoup.connect("http://video.varzesh3.com/").get();
Element recentVideoHtml = doc.getElementById("recent_posts");
Elements links = recentVideoHtml.select("a[href]");
Elements imgs = recentVideoHtml.select("img[src]");
Elements titles = recentVideoHtml.select("strong");
for (Element link: links) {
videoLink.add(link.attr("href"));
}
for (Element img: imgs) {
videoImage.add(img.attr("src"));
}
for (Element title: titles) {
videoTitle.add(title.text());
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
ممنونم داداش گلم ، من کد های شما رو اجرا کردم خطای NetworkOnMainThreadException رو برام داد که کد ها رو ریختم روی یک ترد به این صورت ، میخاسم بدونم راهنمایی کنی کارم درست بوده یا نه
final ArrayList<String> videoLink = new ArrayList<String>();
final ArrayList<String> videoImage = new ArrayList<String>();
final ArrayList<String> videoTitle = new ArrayList<String>();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Document doc = Jsoup.connect("http://video.varzesh3.com/").get();
Element recentVideoHtml = doc.getElementById("recent_posts");
Elements links = recentVideoHtml.select("a[href]");
Elements imgs = recentVideoHtml.select("img[src]");
Elements titles = recentVideoHtml.select("strong");
for (Element link: links) {
videoLink.add(link.attr("href"));
}
for (Element img: imgs) {
videoImage.add(img.attr("src"));
}
for (Element title: titles) {
videoTitle.add(title.text());
}
}
catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
}
}
خب تصویری که توی لاگ کت بهم نشون داده به این صورته ؟
اگر تا اینجا همه چی اکی بوده ممنونم میشم راهنمایی کنی که از این به بعد باید این خروجی رو چطوری در دیتا بیس ذخیره کنم ؟
خب شما امتحان کن ببین اطلاعات درست دریافت میشه یا نه.برا من نیاز به thread نداشت.خروجی هارو با لوگ نمایش بده ببین مشکلی پیش میاد یا نه یعنی حلقه هارو به این صورت بنویس :
for (Element link: links) {
videoLink.add(link.attr("href"));
Log.i("LOG",link.attr("href"));
}
for (Element img: imgs) {
videoImage.add(img.attr("src"));
Log.i("LOG",img.attr("src"));
}
for (Element title: titles) {
videoTitle.add(title.text());
Log.i("LOG",title.text());
}
بعد توو لوگ کت ببین اطلاعات مشون داده میشن
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
