بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
AKAM 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام دوستان

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

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

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

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

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

نظرات

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

پاسخ‌ها 7

AKAM 10 سال پیش

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

  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());

نظرات

mtn67 10 سال پیش
من خیلی وقته برنامه نویسی رو کنار گذاشتم. ایکلیپس ندارم که کد رو تست کنم.با JSOUP شما میتونی تعیین کنی که اطلاعات داخل یک تگ خاص نمایش داده بشه.مطمعنا لینک اخبار داخل یک تگ خاص هستن که شما باید از اون تگ استفاده کنی. در کد بالا شما تمام لینک های موجود در سورس سایت مورد نظر رو گرفتید.
AKAM 10 سال پیش

دوست عزیز خیلی ممنون، من روی كتابخانه‌ 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"));
    }

نظرات

AKAM 10 سال پیش
دوستان عزیز ، لطفا راهنمایی كنید. ممنون.
AKAM 10 سال پیش

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

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

نظرات

Spirit 10 سال پیش

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

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

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

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

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

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


نظرات

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

سلام ، دوستان با نمایش عكس با كتابخانه‌ 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 سال پیش

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

 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);
            }
        }

 

 

نظرات

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

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

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

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

نظرات


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