آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

rss و استفاده‌ از كتابخانه‌ jsoup

AKAM  10 سال پیش  10 سال پیش
0 0

سلام دوستان

یك فیدریدر میخوام درست كنم كه‌ اخبار رو از سایتهای مختلفی میگیره‌ ، كه‌ بعضی از این سایتها rss دارند و بعضی دیگر ندارندمن با توجه‌ به‌ پروژه‌ استاد قسمتی از كارها رو تونستم انجام بدم. اما چند كار دیگه‌ هست كه‌ میخوام انجام بدم هر كاری كردم نشد. 1- برای استفاده‌ از كتابخانه‌ jsoup  حتما باید Html رو بلد باشم؟ و با این دستورات كار كنم ؟

2- دستورات این كتابخانه‌ رو كسی میتونه‌ به‌ فارسی یه‌ شرح جزئی بكنه‌؟

3- برای اینكه‌ عكس مطلب و ادامه‌ مطلب رو در نرم افزار فید ریدرم داشته‌ باشم از كدام دستورات كتابخانه‌ jsoup استفاده‌ كنم؟

4- چون صفحه‌ خبر همیشه‌ اپدیت میشه‌ وقتی كه‌ از این كتابخانه‌ برای گرفتن خبر استفاده‌ كنیم مشكلی پیش نمیاد ؟ مثلا من اخبار ورزشی را گرفتم با استفاده‌ از این كتابخانه‌ ، حالا اگه‌ اخبار جدید بیاد و روی قسمت ورزشی در نرم افزار كلیك بشه‌ توی نرم افزارم اپدیت میشه‌؟

ببخشید خیلی طولانی شد ، ممنون

+1 0
من جواب چندتا از سوالات شما را میدم. نیاز به یادگیری html نمی باشد فقط بدونید که معنی تگ و کلاس و آی دی در html یعنی چی چون شما بیشتر مطالب رو با استفاده از آی دی یا کلاس آنها دریافت میکنید.توضیح در مورد این کتابخانه در همین انجمن موجود می باشد.در مورد آپدیت شدن خبر هم هیچ مشکلی پیش نمیاد. تصاویر رو هم لینکشو میگیری و با کتابخانه picaso نمایشش میدی. (10 سال پیش)
0 0
خیلی ممنون دوست عزیز ، لطف كنید لینك استفاده‌ از این كتابخانه‌ رو بزارید گشتم پیدا نكردم. فقط برای گرفتن لینك عكس از كدام دستور jsoup استفاده‌ كنم ؟ (10 سال پیش)
+1 0
لینک (10 سال پیش)
+1 0
لینک (10 سال پیش)
+1 0
لینک (10 سال پیش)
 برای این سوال 7 پاسخ وجود دارد.
پاسخ به سوال 
AKAM  10 سال پیش
0 0

یه‌ چیزایی رو تونستم درست كنم ، تونستم لینكهای صفحه‌ای رو كه میخوام بگیرم ولی یه‌ مشكلی داره‌ ، تمام لینكهای داخل صفحه‌ رو میگیره‌ در حالی كه‌ من فقط لینك اخبار رو میخوام ، مثلا نمیخوام لینك ثبت نام در سایت یا لینك درباره‌ ما و غیره‌ رو بگیرم فقط لینك اخبار رو چجوری بگیرم؟

  doc = Jsoup.connect("http://example.com/").get();
Elements links = doc.select("a[href]");
for (Element link: links) {

Log.i("LOG", "\nlink : " + link.attr("href"));
Log.i("LOG", "text : " + link.text());
+1 0
من خیلی وقته برنامه نویسی رو کنار گذاشتم. ایکلیپس ندارم که کد رو تست کنم.با JSOUP شما میتونی تعیین کنی که اطلاعات داخل یک تگ خاص نمایش داده بشه.مطمعنا لینک اخبار داخل یک تگ خاص هستن که شما باید از اون تگ استفاده کنی. در کد بالا شما تمام لینک های موجود در سورس سایت مورد نظر رو گرفتید. (10 سال پیش)
پاسخ به سوال 
AKAM  10 سال پیش
0 0

دوست عزیز خیلی ممنون، من روی كتابخانه‌ JSOUP كار كردم و تقریبا بیشتر دستورات رو الان خوب بلدم ، فقط چندتا سوال دیگه‌ دارم ممنون میشم كمكم كنی.

1- لینك اخبار و لینك عكسها رو با JSOUP گرفتم ، چجوری در لیست ویو بزارمشون هر كاری كردم نتونستم روى ليست ويو نمايشش بدم

2- لينك عكسم دارم ایا كتابخانه‌ خاصی میخواد برای اینكه‌ در لیست ویو نمایشش بدم؟

3- میشه‌ با rss مثلا اخبار ورزشی سایت الف رو گرفت و با JSOUP اخبار ورزشی سایت ب و هردو رو با هم توی لیست ویو نمایش داد؟

4- برای لینك ادامه‌ مطلب میتونم لینك رو بگیرم ولی چجوری تكست توی مطلب رو بگیرم و همراه‌ با عكس توی مثلا یه‌ فورم نمایش بدم؟ دستور خاصی میخواد؟

  1.      Document doc = Jsoup.connect("http://site.com/NewsListing.aspx?pageid=451").get();
    Elements resentLink = doc.getElementsByClass("topStoryItem");
    Elements links = resentLink.select("h1 a[href]");
    Elements imgs = resentLink.select("img[src]");

    Element logo = doc.head().select("link[href~=.*\\.(ico|png)]").first();
    Log.i("LOG", "Logo : " + logo.attr("content"));
    Log.i("LOG",logo.attr("href"));

    for (Element link: links) {
    newsLink.add(link.attr("href"));
    Log.i("LOG", link.attr("href"));
    }
    for (Element img: imgs) {
    newsImage.add(img.attr("src"));
    Log.i("LOG",img.attr("src"));
    }
0 0
دوستان عزیز ، لطفا راهنمایی كنید. ممنون. (10 سال پیش)
پاسخ به سوال 
AKAM  10 سال پیش
0 0

دوستان محترم لطفا راهنمایی كنید ، بعضی از سایتا rss دارن و بعضیاشون ندارن با jsoap اونایی كه‌ rss ندارن رو میتونم بگیرم

ولی مشكلم اضافه‌ كردنشون به‌ لیست ویو هست ، خیلی مشكله‌ هر كاری كردم نشد.

پاسخ به سوال 
Spirit  10 سال پیش
+2 0

با این شیوه پروژه تون رو پیاده کنید بهتره به نظرم:

بین ویژگی های تمام منابع اونایی که مشترک هستن رو استخراج کنید و بر اساس اونا یه جدول در دیتابیس ایجاد کنید، مثلا همه منابع ممکنه عنوان و لینک داشته باشن، ولی ممکنه بعضی عکس یا تاریخ نداشته باشن، پس ویژگی مشترک میشه عنوان و لینک.

بار اول که برنامه اجرا میشه دیتابیس خالی هست پس دستوری صادر میشه که اطلاعات از اینترنت دریافت و در دیتابیس ثبت بشه، و بعد از اتمام کار لیست شما با استفاده از اطلاعات دیتابیس نمایش داده بشه.

دفعات بعد که برنامه اجرا میشه چون دیتابیس خالی نیست از همون اطلاعات قبلی استفاده میکنه و لیست رو نمایش میده، در همین حین بصورت خودکار یا در زمان دیگری با دستور کاربر دوباره اون قسمت مربوط از برنامه شروع میکنه به بروزسانی، حالا اگر موارد جدیدی در دیتابیس ثبت شد، لیست موارد جدید رو هم از دیتابیس دریافت میکنه و نمایش میده.

پس ارتباط مستقیمی بین قسمتی که اطلاعات رو از اینترنت میگیره و قسمتی که لیست نمایش میده وجود نداره. بلکه هر کدوم جداگانه با دیتابیس در ارتباط هستن.

نکته دیگه، اگر هدف برنامه ای مثل «آخرین خبر» هست، استفاده از JSoup و امثالش اصلا گزینه مناسبی نیست، چون هم ترافیک مصرفی بالا میره، و هم با یه تغییر در ساختار سایت برنامه به درستی کار نخواهد کرد.
محتوا باید توسط یه WebService آماده استفاده برنامه باشه، روشی که اغلب برنامه های موجود طبق اون عمل می‌کنن.


0 0
ممنون دوست عزیز، اگه‌ نخوام از دیتا بیس استفاده‌ كنم هم میشه‌ این كار رو كرد ؟ (10 سال پیش)
0 0
در پروژه‌ فیدریدر استاد كه‌ فقط xml رو پارس كرده‌ و نیاز به‌ دیتابیس نداشته‌ ، توی اون پروژه‌ ایا میشه‌ چندتا rss مختلف به‌ پروژه‌ اضافه‌ كرد ؟ (10 سال پیش)
0 0
شدنش که میشه، اگر مباحث رو مفهومی یاد گرفتید (یا بگیرید) کاری نداره، باز هم میگم ولی روشی درستی نیست. (10 سال پیش)
پاسخ به سوال 
AKAM  10 سال پیش
0 0

سلام ، دوستان با نمایش عكس با كتابخانه‌ picaso مشكل دارم ، لینك همه‌ عكسای خبر رو میگیرم ولی چجوری با استفاده‌ از این كتابخانه‌ توی لیست ویو كنار تكست خبر  نمایشش بدم ، از كدهاش استفاده‌ كردم ولی خطا میده‌

كدهای داخل كلاس AdapterNote

 public class AdapterNote extends ArrayAdapter<StructNote> {

public AdapterNote(ArrayList<StructNote> array) {
super(G.context, R.layout.adapter_notes, array);
}


private static class ViewHolder {

public ViewGroup layoutRoot;
public TextView txtSiteName;
public TextView txtTime;
public TextView txtListName;
public TextView txtTitle;
public ImageView imgNews;


public ViewHolder(View view) {
txtTitle = (TextView) view.findViewById(R.id.txtTitle);
txtSiteName = (TextView) view.findViewById(R.id.txtSiteName);
txtTime = (TextView) view.findViewById(R.id.txtTime);
txtListName = (TextView) view.findViewById(R.id.txtListName);
imgNews = (ImageView) view.findViewById(R.id.imgNews);

}


public void fill(final ArrayAdapter<StructNote> adapter, final StructNote item, final int position) {
// txtTitle.setText(item.title);
txtSiteName.setText(item.siteName);
txtListName.setText(item.listName);
txtTime.setText(item.time_date);
txtTitle.setText(item.titleNews);

}
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;

StructNote item = getItem(position);
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.adapter_notes, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.fill(this, item, position);
return convertView;
}
}

كدها رو باید در متد fill بزارم لینكهای عكسها قبلا در كلاسی كه‌ مربوط به‌ گرفتن لینك خبر و لینك عكسها و نمایش لیست ویو است در یك ارایه‌ زخیره‌ شده‌ ، چجوری بتونم در این كلاس در این متد بگم كه‌ بره‌ و از اون ارایه‌ عكسها رو لود كنه‌ ؟  ممنون

پاسخ به سوال 
احمد  10 سال پیش
0 0

این تابع به کارت میاد

 public void fill(final ArrayAdapter<StructTask> adapter,
				final StructTask item, final int position) {
			txtTitle.setText(item.task_title);
			txtDescription.setText(item.task_desc);

			if (item.task_done == 1) {
				chkDone.setChecked(true);
			} else {
				chkDone.setChecked(false);
			}

			// create a buffered image

			strBase64 = item.task_imageblob;

			String filename = item.task_thumbnails.replace(G.URlServer, "");
			filename = filename.replace("/thumbnails/", "");
			filename = filename.replace("/images/", "");

			Log.i(G.Tag, "Original filename: " + filename);
			File imageFile = new File(G.DIR_APP + "/" + filename);
			if (!imageFile.exists()) {
				imgPic.setImageBitmap(null);
				DownloadManager.addToDownloadList(item.task_thumbnails);
				return;
			}

			if (item.task_imageurl_sdcard != null) {
				imgPic.setImageBitmap(null);
				Bitmap bmp = BitmapFactory
						.decodeFile(item.task_imageurl_sdcard);
				Log.i("task_imageurl_sdcard", item.task_imageurl_sdcard);
				imgPic.setImageBitmap(bmp);
			}

            imgDelete.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    adapter.remove(item);

					ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
					params.add(new BasicNameValuePair("task_id", ""
							+ item.task_id));
					Commands.Remove(params);
                }
            });
            layoutRoot.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    Intent intent = new Intent(G.currentActivity, ActivityEdit.class);
                    intent.putExtra("POSITION", position);
					// G.currentActivity.startActivity(intent);
                }
            });
            chkDone.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View view) {
                    CheckBox checkBox = (CheckBox) view;
					if (checkBox.isChecked()) {
						item.task_done = 1;
					} else {
						item.task_done = 0;
					}

					if (item.task_done == 1) {
                        txtTitle.setTextColor(Color.RED);
                    } else {
                        txtTitle.setTextColor(Color.WHITE);
                    }
                }
            });

			if (item.task_done == 1) {
                txtTitle.setTextColor(Color.RED);
            } else {
                txtTitle.setTextColor(Color.WHITE);
            }
        }

 

 

0 0
ممنون ولی من میخوام از كتابخانه‌ پیكاسو استفاده‌ كنم ، و مشكل اینه‌ كه‌ راهی برای قراردادنش در متد fill پیدا نمیكنم در همون كلاس adapter كه‌ بالا گزاشتم (10 سال پیش)
0 0
این کارت راه میندازه لازم نیست لقمه را بپیچونی (10 سال پیش)
پاسخ به سوال 
AKAM  10 سال پیش
0 0

با این كارم درست نمیشه‌ ، باید از كتابخانه‌ لودكردن تصویر استفاده‌ كنم ، با پیكاسو موفق شدم كارم رو راه‌ بندازم ، ولی سرعت لود تصاویر كمی كنده‌

سوالم اینه‌ ،،، بهترین كتابخانه‌ برای لود كردن تصویر از وب ( اینترنت ) و نمایش در ImageView كدام كتابخانه‌ است ؟؟؟

ممنون میشم دوستان كمك كنند


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .